Regex match this OR that?

廉价感情. 提交于 2019-12-12 08:29:09

问题


What is the regex for this?

Match if string

  • NOT ( ends in .php OR ends in .html OR contains / )

Thank you!

Edit: I need the NOT part because the expression is to be used on an Apache mod rewrite, since I can't change the logic of mod _rewrite to avoid the NOT.

Edit: My initial effort was ([^/]+)(.html)$(^.php)$ -- which is monstrusly wrong


回答1:


Apache mod_rewrite does support negation, according to this document.

In mod_rewrite, the NOT character ('!') is also available as a possible pattern prefix. This enables you to negate a pattern; to say, for instance: ``if the current URL does NOT match this pattern''. This can be used for exceptional cases, where it is easier to match the negative pattern, or as a last default rule.

So you should be able to do something like:

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

And that should match anything which does not contain / and does not end in .php or .html




回答2:


It's a whole lot easier to do positive matches in regex than negative matches. Try searching for ends in .php OR ends in .html OR contains / and reverse the logic in your program.

With strict regular expressions, there isn't a general way to negate a given expression. With PCRE's you have the advantage of negative look-aheads, which significantly simplify the process of constructing a negated search, at the expense of performance.

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



回答3:


Use this regex -

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


来源:https://stackoverflow.com/questions/3345747/regex-match-this-or-that

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!