我如何编写一个正则表达式,该正则表达式匹配包含段"articles"
后跟任何其他段的任何网址,但不匹配具有段"articles-main"
的网址?
所以它会匹配这些:
www.mysite.com/articles
www.mysite.com/articles/tinman
但不是这些:
www.mysite.com/articles-main
www.mysite.com/articles-main/tinman
如果重要,可以在ExpressionEngine中使用。
答案 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)
寻找“文章/”。使用你的例子,正则表达式可能有点矫枉过正。