Gol*_*wby 25 regex perl regex-lookarounds
我并不十分确定这种类型的正则表达式的正确措辞是什么,但基本上我要做的是匹配任何以"/"开头但后面没有"bob /"的字符串,作为示例.
所以这些匹配:
/tom/
/tim/
/steve
Run Code Online (Sandbox Code Playgroud)
但这些不会
tom
tim
/bob/
Run Code Online (Sandbox Code Playgroud)
我确定答案非常简单,但我很难在任何地方寻找"正则表达式".我确信有一个更好的词,我想要什么会带来好结果,但我不确定它会是什么.
编辑:我已经更改了标题,以指出我正在寻找的正确名称
ano*_*ard 24
您可以使用负前瞻(在perlre中的"扩展模式"下记录):
/^\/(?!bob\/)/
Run Code Online (Sandbox Code Playgroud)
如果您想要一个否定的前瞻,只是为了找到"foo"
它后面没有跟随的时间"bar"
...
$string =~ m/foo(?!bar)/g;\n
Run Code Online (Sandbox Code Playgroud)\n\n引用文档...
\n\n\n\n
(?!pattern)
\n
(*nla:pattern)
\n
#(*negative_lookahead:pattern)
零宽度负前瞻断言。例如,
\n/foo(?!bar)/
匹配任何后面不跟“bar”的“foo”。但请注意,前视和后视不是同一件事。您不能将其用于向后查找。(来源:PerlDocs。)
接受的答案很好,但没有留下任何解释,所以让我添加一个......
\n/^\\/(?!bob\\/)/\n
Run Code Online (Sandbox Code Playgroud)\n^
\xe2\x80\x94 仅匹配字符串的开头。\\/
\xe2\x80\x94 匹配/
char,我们需要对其进行转义,因为它是正则表达式格式的字符(即s/find/replacewith/
等)。(?!...)
\xe2\x80\x94 如果匹配后跟 则不匹配...
。bob\\/
\xe2\x80\x94 这是...
值,不匹配bob/\', once more, we need to escape the
/`。