正则表达式匹配这个或那个?

时间:2010-07-27 16:28:15

标签: regex mod-rewrite

这是什么样的正则表达式?

匹配字符串

  
      
  • NOT(以.php结尾或以.html结尾或包含/)
  •   

谢谢!

编辑:我需要NOT部分,因为表达式将用于Apache mod重写,因为我无法更改mod _rewrite的逻辑以避免NOT。

编辑:我最初的努力是([^ /] +)(。html)$(^。php)$ - 这是一个很糟糕的错误

3 个答案:

答案 0 :(得分:10)

根据{{​​3}},

Apache mod_rewrite 支持否定。

  

在mod_rewrite中,NOT字符   ('!')也可以   模式前缀。这使您能够   否定一种模式;为...说   instance:``如果当前的URL有   不符合这种模式''。这可以   用于特殊情况,在哪里   更容易匹配负面   模式,或作为最后一个默认规则。

所以你应该能够做到这样的事情:

!^(.*?/.*|.*?\.(?:php|html)$)$

这应匹配任何不包含/并且不以.php或.html

结尾的内容

答案 1 :(得分:4)

在正则表达式中进行正面匹配比使用负面匹配要容易得多。尝试搜索ends in .php OR ends in .html OR contains /并反转程序中的逻辑。

使用严格的正则表达式,没有通用的方法来否定给定的表达式。使用PCRE,您可以获得负面预测,从而大大简化构建否定搜索的过程,但会牺牲性能。

^([^/]*\.(?!html$|php$)[^./]*)|[^/.]$

答案 2 :(得分:1)

使用此正则表达式 -

(.*\.php$)|(.*\.html$)|(.*\/.*)