在大多数情况下,您可以使用来避免变长的回避\K
。
s/(?<=foo.*)bar/moo/s;
将会
s/foo.*\Kbar/moo/s;
负向后看有点棘手。
s/(?<!foo.*)bar/moo/s;
将会
s/^(?:(?!foo).)*\Kbar/moo/s;
因为(?:(?!STRING).)*
是STRING
为[^CHAR]*
是CHAR
。
如果您只是匹配,则可能甚至不需要\K
。
/foo.*bar/s
/^(?:(?!foo).)*bar/s
正则表达式的变长后置断言替代
在大多数情况下,您可以使用来避免变长的回避\K
。
s/(?<=foo.*)bar/moo/s;
将会
s/foo.*\Kbar/moo/s;
负向后看有点棘手。
s/(?<!foo.*)bar/moo/s;
将会
s/^(?:(?!foo).)*\Kbar/moo/s;
因为(?:(?!STRING).)*
是STRING
为[^CHAR]*
是CHAR
。
如果您只是匹配,则可能甚至不需要\K
。
/foo.*bar/s
/^(?:(?!foo).)*bar/s