这是什么样的正则表达式?
匹配字符串
- NOT(以.php结尾或以.html结尾或包含/)
谢谢!
编辑:我需要NOT部分,因为表达式将用于Apache mod重写,因为我无法更改mod _rewrite的逻辑以避免NOT。
编辑:我最初的努力是([^ /] +)(。html)$(^。php)$ - 这是一个很糟糕的错误
答案 0 :(得分:10)
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$)|(.*\/.*)