3

我将如何编写一个正则表达式来匹配包含该段"articles"后跟任何其他段的任何 URL,但不将 URL 与该段匹配"articles-main"

所以它会匹配这些:

www.mysite.com/articles
www.mysite.com/articles/tinman

但不是这些:

www.mysite.com/articles-main
www.mysite.com/articles-main/tinman

如果重要的话,这是在 ExpressionEngine 中使用的。

4

3 回答 3

5

使用所谓的负前瞻

articles(?!-main)

或更准确地说:

mysite.com/articles(?!-main)
于 2012-10-11T20:09:30.847 回答
1

与@Regexident 的建议背道而驰,我建议采取积极的前瞻性articles(?=$|\/)

这就是说要匹配articles,看看它后面是一个/字符还是字符串的结尾。这样,无论您是匹配"articles-main"还是"articlessomethingelse".

不会检查文章是否是它自己的目录。的值http://example.com/some-articles将匹配,这可能是不可接受的。

如果您不关心/字符是否包含在匹配中,您可以使用正则表达式,如下所示:

\/articles(?=\/|$)

如果您确实关心并且正在使用 PHP 的 pcre 函数,则可以使用积极的后向 ( (?<=)):

(?<=\/)articles(?=\/|$)

有关这些正则表达式断言的更多信息可以在 php.net 网站上找到。

于 2012-10-11T20:15:29.457 回答
0

寻找“文章/”。对于您的示例,正​​则表达式可能有点矫枉过正。

于 2012-10-11T20:11:04.017 回答