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

时间:2010-03-10 22:51:20

标签: regex url-rewriting

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

重写规则是

^people/([A-Za-z0-9\-\_]+)/?$

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

/people/John_Smith

...会转发,但

/people/People_Search

......不应该假设是。

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

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

正则表达式有一种称为“非捕获否定前瞻断言”的东西,它基本上表示“与下列内容不匹配”。它看起来像这样:

^people/(?!People_Search)([A-Za-z0-9\-\_]+)/?$ 

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

仅供参考:还存在负面的后观断言(?<!),以及前瞻(?=)和后观(?< =)断言的正面版本。

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

答案 1 :(得分:1)

^people/(?!People_Search)([A-Za-z0-9\-\_]+)/?$

People_Search

之后阻止匹配people/的否定前瞻