正则表达式匹配“文章”但不匹配“articles-main”?

时间:2012-10-11 20:08:16

标签: regex expressionengine

我如何编写一个正则表达式,该正则表达式匹配包含段"articles"后跟任何其他段的任何网址,但不匹配具有段"articles-main"的网址?

所以它会匹配这些:

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

但不是这些:

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

如果重要,可以在ExpressionEngine中使用。

3 个答案:

答案 0 :(得分:5)

使用所谓的否定前瞻

articles(?!-main)

或更确切地说:

mysite.com/articles(?!-main)

答案 1 :(得分:1)

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

这是为了匹配articles并查看它后面是/字符还是字符串的结尾。这样,无论您是与"articles-main"还是"articlessomethingelse"进行匹配都无关紧要。

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

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

\/articles(?=\/|$)

如果你关心并使用PHP的pcre函数,你可以使用正面的lookbehind((?<=)):

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

More information about these regex assertions can be found on the php.net website.

答案 2 :(得分:0)

寻找“文章/”。使用你的例子,正则表达式可能有点矫枉过正。