我不太确定这种正则表达式的正确措辞是什么,但基本上我想要做的是匹配任何以“/”开头但后面没有“bob/”的字符串,例如.
所以这些会匹配:
/tom/
/tim/
/steve
但这些不会
tom
tim
/bob/
我确信答案非常简单,但是我很难在任何地方搜索“regex not”。我敢肯定,对于我想要的东西,有一个更漂亮的词会带来好的结果,但我不确定它会是什么。
编辑:我已更改标题以指示我正在寻找的正确名称
我不太确定这种正则表达式的正确措辞是什么,但基本上我想要做的是匹配任何以“/”开头但后面没有“bob/”的字符串,例如.
所以这些会匹配:
/tom/
/tim/
/steve
但这些不会
tom
tim
/bob/
我确信答案非常简单,但是我很难在任何地方搜索“regex not”。我敢肯定,对于我想要的东西,有一个更漂亮的词会带来好的结果,但我不确定它会是什么。
编辑:我已更改标题以指示我正在寻找的正确名称
您可以使用负前瞻(在 perlre 的“扩展模式”下记录):
/^\/(?!bob\/)/
如果你想要一个否定的前瞻只是为了找到"foo"
它什么时候没有被"bar"
......
$string =~ m/foo(?!bar)/g;
引用文档...
(?!pattern)
(*nla:pattern)
#(*negative_lookahead:pattern)
零宽度负前瞻断言。例如
/foo(?!bar)/
匹配任何出现的“foo”,但后面没有“bar”。但是请注意,lookahead 和lookbehind 不是一回事。您不能将其用于后视。(来源:PerlDocs。)
接受的答案很好,但没有留下任何解释,所以让我添加一个......
/^\/(?!bob\/)/
^
— 仅匹配字符串的开头。\/
— 匹配/
我们需要转义的字符,因为它是正则表达式格式的字符(即s/find/replacewith/
,等)。(?!...)
— 如果匹配后有 ,则不匹配...
。bob\/
— 这是...
值,不要匹配bob/', once more, we need to escape the
/`。