如何做一个perl可变长度正面lookbehind或类似的东西[复制]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

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

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

我想用bat替换cap,只要foo在同一行之前的某个地方。

所以我想到了这个。

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

但是,我得到了错误

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

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

regex perl regex-lookarounds
1个回答
1
投票

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

foo.*\Kbat

RegEx live demo

Perl的:

perl -0777 -pe 's/foo.*\Kbat/cap/g' file
© www.soinside.com 2019 - 2024. All rights reserved.