【发布时间】:2012-03-09 04:16:28
【问题描述】:
我有一个 URL 模式,其中需要包含 APPLES 或 ORANGES,没有其他值。可选地,它也可以有查询参数。我已经尝试了许多 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 之间的任何路径,因此使用 。 在很多地方。
实现这一目标的最佳方法是什么?
**编辑:最终答案**
我的最终答案是从 math.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 总体上格式正确。
【问题讨论】: