正则表达式与负面展望单词



使用 PCRE 风格,我试图想出一个正则表达式,只要它不包含 URL 后/foo,它就会匹配/songs/{id}

/songs/902   => Match
/songs/902/   => Match
/songs/902/foo   => No Match
/songs/902/foo/201/bar   => No Match
/songs/902/bar   => Match

这就是我到目前为止^/songs/.+(?!/foo).*$的,但它似乎与所有给定的示例相匹配。

使用

^/songs/(?!.*/foo).+

请参阅证据。^/songs/在开头找到/songs/,然后(?!.*/foo)检查字符串后面是否存在/foo,并且.+与剩余的内容匹配。

您正在使用/songs/.+(?!/foo),其中在贪婪.+之后应用负前瞻,在/songs/之后,将只匹配包括/foo直到结束的所有内容,然后它将满足前瞻断言。您需要在匹配/songs//songs/<digits>后立即应用前瞻断言。

您可以在php中使用此正则表达式,并进行负面展望:

~/songs/d+(?!.*/foob)~

正则表达式演示

正则表达式详细信息:

  • /songs/d+: 匹配/songs/后跟 1+ 位数字
  • (?!.*/foob): 如果我们领先于当前位置/foo,则负面展望比赛失败。

法典:

$re = '~/songs/d+(?!.*/foob)~';
preg_match_all($re, $input, $matches);
// Print the match result
var_dump($matches[0]);

相关内容

  • 没有找到相关文章

最新更新