我使用以下正则表达式$word在更大的字符串中搜索字符串$referenceLine,如下所示:
$wordRefMatchCount =()= $referenceLine =~ /(?=\b$word\b)/g
Run Code Online (Sandbox Code Playgroud)
当我的$word子字符串包含一些(等等时会发生问题.因为它将它作为正则表达式的一部分而不是匹配的字符串,并给出以下错误:
Unmatched ( in regex; marked by <-- HERE in
m/( <-- HERE ?=\b( darsheel safary\b)/
at ./bleu.pl line 119, <REFERENCE> line 1.
Run Code Online (Sandbox Code Playgroud)
可以告诉我一个解决方案吗?我想如果我能够以某种方式让perl理解我们想要在$word不进行评估的情况下寻找整体,那么它可能会成功.
Tim*_*ker 11
使用
$wordRefMatchCount =()= $referenceLine =~ /(?=\b\Q$word\E\b)/g
Run Code Online (Sandbox Code Playgroud)
告诉正则表达式引擎将每个字符$word视为文字字符.
\Q标记开头,\E标记Perl正则表达式中文字字符串的结尾.
或者,你可以做到
$quote_word = quotemeta($word);
Run Code Online (Sandbox Code Playgroud)
然后使用
$wordRefMatchCount =()= $referenceLine =~ /(?=\b$quote_word\b)/g
Run Code Online (Sandbox Code Playgroud)
还有一件事(从评论中可以找到更难找到的东西:
由于单词边界锚,您的正则表达式在示例中失败\b.该锚在单词字符和非单词字符之间匹配.只有放在实际的单词周围才有意义,即\bbar\b确保只bar匹配,而不是foobar或barbaric.如果你把它放在非单词(如\b( darsheel safary\b)中,那么它将导致匹配失败(除非在之前有一个字母,数字或下划线().
| 归档时间: |
|
| 查看次数: |
7436 次 |
| 最近记录: |