可能不会丢失匹配的字符串?

时间:2016-03-04 11:53:58

标签: regex perl regex-lookarounds

如果我这样做

perl -i -slpe 's/$wgDBserver = "\K.*?"/$ip"/' -- -ip=$IP test

然后我必须在替换方面添加",因为我在匹配方面.*?",因此会丢失",因此必须再次替换它。

问题

是否可以不再添加"我的自我?

这是我的测试用例:

$ IP="123.456.78.9" && \
  echo -n '\n\n$wgDBserver = "172.17.0.3";\naaa "123"\n\n\n' > test && \
  perl -i -slpe 's/$wgDBserver = "\K.*?"/$ip"/' -- -ip=$IP test && \
  cat test


$wgDBserver = "123.456.78.9";
aaa "123"

1 个答案:

答案 0 :(得分:3)

您应该在perlre中查看“Look-Around Assertions”。

使用正向前瞻(?=)

  

(?=pattern):零宽度正向前瞻断言。例如,   /\w+(?=\t)/匹配单词后跟标签,但不包括   $&中的标签。

"\K.*?(?=")

因此,此处尾随"将匹配,但不会在$&中捕获。