如何做一个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

RegEx live demo

Perl的:

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

以上是关于如何做一个perl可变长度正面lookbehind或类似的东西[复制]的主要内容,如果未能解决你的问题,请参考以下文章

非固定长度的lookbehind解决方法

我可以告诉 Perl 一些数据是不可变的以加快速度吗?

解压缩具有可变长度的未知序列化格式

如何生成具有可变长度的随机字符串

如何测试以确定浏览器是不是支持 JS 正则表达式lookahead/lookbehind?

shared_ptr 到可变长度结构