除非术语存在,否则RegEx URL ReWrite将匹配表达式中的所有内容

Geo*_*ton 4 regex url-rewriting

我目前正在重写URL,但是我的RegEx表达式正在捕获我想要忽略的目录.

重写规则是

^people/([A-Za-z0-9\-\_]+)/?$
Run Code Online (Sandbox Code Playgroud)

......哪个能抓到匹配的东西.但是,我想排除目录People_Search,例如...

/people/John_Smith
Run Code Online (Sandbox Code Playgroud)

......会前进,但是

/people/People_Search
Run Code Online (Sandbox Code Playgroud)

......不应该假设.

这是我想要查找的唯一术语,所以如果它存在于字符串中的任何位置,我想忽略它.

有任何想法吗?

Che*_*eso 7

正则表达式有一个称为"非捕获否定前瞻断言"的东西,它基本上说"不匹配以下".它看起来像这样:

^people/(?!People_Search)([A-Za-z0-9\-\_]+)/?$ 
Run Code Online (Sandbox Code Playgroud)

是否可以使用它取决于您使用的重写引擎以及包含在其中的正则表达式支持的级别.我希望大多数常见的重写器都支持这一点.

仅供参考:还有负面的lookbehind断言(?<!),以及前瞻(?=)和lookbehind(?<=)断言的正面版本.

教程:http://www.regular-expressions.info/lookaround.html