Perl:解码正则表达式

时间:2015-03-16 14:46:30

标签: regex perl

如果有人能帮我理解以下内容,我将非常感激。

=~/(?<![\w.])($val)(?![\w.])/gi)

这是我接受的,但我不明白这一点。

回顾:(?=a)代表前瞻,?!代表负向前瞻,?<=?<!代表背后照(分别为正面和负面)。

4 个答案:

答案 0 :(得分:2)

正则表达式似乎搜索$val(即与变量$val的内容相匹配的字符串)包围字词或点。

$val放入括号中会记住$1中对应的匹配部分。

有关详细信息,请参阅perlre

请注意,=~不是正则表达式的一部分,它是&#34;绑定运算符&#34;。

同样,gi)是更大的一部分。 g表示匹配发生全局,根据发生匹配的上下文具有不同的效果,i使匹配大小写不敏感(这只能影响$ val)。可能整个表达式都在括号中,但是我们无法看到开头的那个。

答案 1 :(得分:1)

(?<!PAT)视为“未紧接文本匹配PAT”。

(?!PAT)视为“未紧跟文本匹配PAT”。

答案 2 :(得分:0)

我使用这些网站来帮助测试和学习和解码正则表达式:

https://regex101.com/:这个解剖并解释了最佳IMO的表达方式。

http://www.regexr.com/

答案 3 :(得分:0)

定义$ val,然后观察正则表达式引擎使用rxrx - 命令行REPL和Regexp :: Debugger的包装器

它显示这样的输出但是颜色

            Matched
            |
            VVV
/(?<![\w.])(dog)(?![\w.])/


                                            |
                                            V
'The quick brown fox jumps over the lazy dog'
                                         ^^^

[Visual of regex at 'rxrx' line 0]         [step: 189]

它也提供了这样的描述

(?<!              #    Match negative lookbehind
  [\w.]           #      Match any of the listed characters
)                 #    The end of negative lookbehind
(                 #    The start of a capturing block ($1)
  dog             #      Match a literal sequence ("dog")
)                 #    The end of $1
(?!               #    Match negative lookahead
  [\w.]           #      Match any of the listed characters
)                 #    The end of negative lookahead