Perl正则表达式匹配但只替换块

And*_*wby 2 regex perl

这是一个很愚蠢的问题——但我在画一个空白!我有一个测试字符串:

Foo|||bar||something|whatever
Run Code Online (Sandbox Code Playgroud)

我需要更换|||EMPTY_STRING|每个实例。

我正在做:

s/\Q||/|EMPTY_STRING|/g;
Run Code Online (Sandbox Code Playgroud)

问题是,这将其转换为:

Foo|EMPTY_STRING||bar|EMPTY_STRING|something|whatever
Run Code Online (Sandbox Code Playgroud)

注意 || 在那里。我一定错过了一些愚蠢的东西。它是什么?

anu*_*ava 7

您可以在正则表达式中使用环视:

s='Foo|||bar||something|whatever'

perl -pe 's/(?<=\|)(?=\|)/EMPTY_STRING/g' <<< "$s"
Run Code Online (Sandbox Code Playgroud)

Foo|EMPTY_STRING|EMPTY_STRING|bar|EMPTY_STRING|something|whatever
Run Code Online (Sandbox Code Playgroud)

正则表达式详细信息:

  • (?<=\|): Lookbehind 断言我们|落后于当前位置
  • (?=\|): Lookahead 断言我们|领先于当前位置