我有一个非常简单的替代:
my $s = "<a>test</a> <a>test</a>";
$s =~ s{ <a> .+? </a> $ }{WHAT}x;
print "$s\n";
Run Code Online (Sandbox Code Playgroud)
打印:
WHAT
Run Code Online (Sandbox Code Playgroud)
但我期待:
<a>test</a> WHAT
Run Code Online (Sandbox Code Playgroud)
在与ungreedy选项交互时,我对"结束字符串锚"有什么误解?
所以,我对regexp引擎错了.实际上,不要将代码人性化 - 它正确地做了你写的,而不是你" 想做 ".
它首先找到<a>,然后找到</a>$.第一次锁定为正,模式匹配.
正确的模式必须是:
$s =~ s{ <a> (?! .* <a> ) .* </a> }{WHAT}x;
Run Code Online (Sandbox Code Playgroud)
多数民众赞成给我正确的
<a>test</a> WHAT
Run Code Online (Sandbox Code Playgroud)
因为现在我真的问正则表达式的最后 <a>.
我认为效率较低[^<]+,但更灵活.
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |