我有一个URL模式,它需要包含APPLES或ORANGES,没有其他值。或者,它也可以具有查询参数。我已经尝试过许多RegEx模式,但我无法获得尊重严格匹配的模式。部分URL的RegEx模式(在路径中开启两个值)
网址取样
好
http://www.website.com/en/pages/APPLES
http://www.website.com/en/pages/APPLES?k=v
http://www.website.com/en/pages/ORANGES?k=v&k2=v2
http://www.website.com/en/pages/ORANGES
坏
http://www.website.com/en/pages/APPLES???k=v
http://www.website.com/en/pages/APPLES?k=v=v
http://www.website.com/en/pages/APPLESORANGES
http://www.website.com/en/pages/1APPLES
http://www.website.com/en/APPLES
种尝试正则表达式模式(好,至少最好尝试)
(http://*.*.website*.*.com/*.*/pages(/APPLES)|(/ORANGES)[\?]*.*)
(http://*.*.website*.*.com/*.*/pages(/APPLES|/ORANGES)[\?]*.*)
如果你很好奇,我故意要允许任何子域名,“网站”(针对不同的环境)后的后缀,以及.com /和/ pages之间的任何路径,因此使用。在很多地方。
什么是最好的方法来实现这一目标?
**编辑:最后的答案**
我最后的答案是从mathematical.coffee和fardjad合并。
^https?://.*\.website\b.*\.com/.*/pages/(APPLES\b|ORANGES\b)((\?\w+=\w+)(&?\w+=\w+)*)?$
单限制我发现的是,它不会允许少数有效字符的查询字符串参数键值对(见:http://en.wikipedia.org/wiki/Query_string#Structure)(〜_-%+)。这对我来说不是问题,因为我匹配从.NET的Uri类返回的字符串,所以我知道URL是整体良构的。
感谢您的快速答复!真的很感谢你的模式的详细分解:)我使用PAGE1和PAGE2作为占位符,实际上我有两个不同的单词(例如APPLE,ORANGE);对不起,在这一点上不清楚。我更新了我的问题以反映这一点。我尝试修改你的模式如下,但我错过了一些东西,因为它不正确匹配。 '''code'http://.* \ .website \ b。* \ .com /.*/ pages/APPLES \ b | ORANGES \ b(\?[^ =] + = [^&=] +( &[^ =] + = [^ =&] +)*)? – 2012-03-09 05:03:07
你必须在变化周围添加括号:'(APPLES | ORANGES)'。 – 2012-03-09 05:10:05
真棒,得到它所有的工作。您的模式没有过滤掉所有我的不良网址,所以我混合并匹配了您的模式片段和@fardjad中的一个,直到所有测试通过。只是我不太担心的一个小问题是,在查询参数中我不能有几个允许的字符,但是因为我匹配从.NET URI返回的字符串,所以应该没问题。最终模式:'code'^https?://.* \ .website \ b。* \ .com /.*/ pages /(APPLES \ b | ORANGES \ b)((\?\ w + = \ w +)( &?\ w + = \ w +)*)?$ – 2012-03-09 05:56:19