如何做一个perl可变长度正面lookbehind或类似的东西[复制]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何做一个perl可变长度正面lookbehind或类似的东西[复制]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我确信有一种更好的方法可以做到这一点(我会用一种完全不同的方法来回答),但是我需要一种方法来编程修改某些文本,然后在它之前的某个其他符合条件的字符串之前。例如,文件可能如下所示。
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.
所以我想知道如何进行可变长度的后视或者是否有更好的方法我可以在单行中获得这个?
答案
在Perl中使用\K
令牌(匹配重置器)进行可变长度的后视:
foo.*\Kbat
Perl的:
perl -0777 -pe 's/foo.*\Kbat/cap/g' file
以上是关于如何做一个perl可变长度正面lookbehind或类似的东西[复制]的主要内容,如果未能解决你的问题,请参考以下文章