如何做一个perl可变长度正向lookbehind或类似的东西

时间:2018-05-18 20:28:44

标签: regex perl regex-lookarounds

我确定有更好的方法可以做到这一点(我将采用完全不同的方法来回答),但我需要一种方法来以编程方式修改某些其他文本之前的文本在它之前的某个地方限定字符串。例如,文件可能如下所示。

foo bar bat car
foo shmat lat dog
blat cat mat fat
foo bat cat

每当foo位于同一行之前的某个位置时,我想用bat替换cap

所以我想到了这个。

perl -0777 -pe 's/(?<=foo.*)bat/cap/g' file

然而,我收到错误

Variable length lookbehind not implemented in regex m/(?<=foo.*)bat/ at -e line 1.

所以我想知道如何进行可变长度的后视或者是否有更好的方法我可以在单行中获得这个?

1 个答案:

答案 0 :(得分:1)

在Perl中使用\K令牌(匹配重置器)进行可变长度的后视:

foo.*\Kbat

RegEx live demo

的Perl:

perl -0777 -pe 's/foo.*\Kbat/cap/g' file