perl 正则表达式 (?>! 运算符的作用是什么?
What does the perl regex (?>! operator do?
我继承了一些 perl 5 (5.20) 代码,其中包含一个带有运算符 ?>! 的正则表达式。不幸的是,我一直找不到关于这个操作员在做什么的任何文档,只有 man perlre
?> 有记录。
当示例代码中的正则表达式 matches/doesn 不匹配时,谁能向我解释一下?
my $text = "powergenerator";
if ($text =~ m/generator(?>!power)/) {
print "MATCH\n";
} else {
print "NO MATCH\n";
}
原始代码中有注释,预期的用例是在不是 powergenerator 的上下文时匹配生成器,但是根据我的测试,这不是发生的情况。
注意:代码只关心regex是否匹配,不处理匹配位置。
这可能是 (?!
的拼写错误。因为它是 (?>
后跟文字字符串 !power
.
没有这样的运算符。 (?>!power)
是 (?>
...)
(非回溯)构造,匹配文字字符串 !power
.
它可能打算 (?<!power)
(负后视),从这个例子来看……但如果意图是得到 "NO MATCH",那也行不通——它只是断言字符串 "rator" 不等于 "power",这始终为真。做似乎想要的事情的正确方法完全取决于是想要的东西,但事实并非如此。
我继承了一些 perl 5 (5.20) 代码,其中包含一个带有运算符 ?>! 的正则表达式。不幸的是,我一直找不到关于这个操作员在做什么的任何文档,只有 man perlre
?> 有记录。
当示例代码中的正则表达式 matches/doesn 不匹配时,谁能向我解释一下?
my $text = "powergenerator";
if ($text =~ m/generator(?>!power)/) {
print "MATCH\n";
} else {
print "NO MATCH\n";
}
原始代码中有注释,预期的用例是在不是 powergenerator 的上下文时匹配生成器,但是根据我的测试,这不是发生的情况。 注意:代码只关心regex是否匹配,不处理匹配位置。
这可能是 (?!
的拼写错误。因为它是 (?>
后跟文字字符串 !power
.
没有这样的运算符。 (?>!power)
是 (?>
...)
(非回溯)构造,匹配文字字符串 !power
.
它可能打算 (?<!power)
(负后视),从这个例子来看……但如果意图是得到 "NO MATCH",那也行不通——它只是断言字符串 "rator" 不等于 "power",这始终为真。做似乎想要的事情的正确方法完全取决于是想要的东西,但事实并非如此。