我并不十分确定这种正则表达式的正确措辞是什么,但基本上我要做的是匹配任何以“/”开头但后面没有“bob /”的字符串,举个例子。
所以这些匹配:
/tom/
/tim/
/steve
但这些不会
tom
tim
/bob/
我确信答案非常简单,但我很难在任何地方搜索“正则表达式”。我确信有一个更好的词来说明我想要什么会带来好结果,但我不确定它会是什么。
编辑:我已经更改了标题以指出我正在寻找的正确名称
答案 0 :(得分:21)
您可以使用否定前瞻(记录在"Extended Patterns" in perlre下):
/^\/(?!bob\/)/
答案 1 :(得分:0)
如果您想要负前瞻只是为了在后面没有 "foo"
的情况下找到 "bar"
...
$string =~ m/foo(?!bar)/g;
引用文档...
<块引用>(?!pattern)
(*nla:pattern)
#(*negative_lookahead:pattern)
零宽度负前瞻断言。例如,/foo(?!bar)/
匹配后面没有“bar”的任何出现的“foo”。但是请注意,向前看和向后看不是一回事。您不能将其用于后视。 (来源:Working Demo Online。)
接受的答案很好,但没有留下任何解释,所以让我补充一个...
/^\/(?!bob\/)/
^
— 仅匹配字符串的开头。\/
— 匹配 /
字符,我们需要对其进行转义,因为它是正则表达式格式的字符(即 s/find/replacewith/
等)。(?!...)
— 如果匹配后跟 ...
,则不匹配。bob\/
— 这是 ...
值,与 bob/', once more, we need to escape the
/` 不匹配。