用于匹配不同样式URL的关键字的正则表达式

时间:2013-03-05 17:19:15

标签: .net regex url regular-language

http://mywebsite/index.aspx?db=DAYTON#id%3D7304%3Bpage%3D1%3Bview%3Dpages

http://mywebsite/#id%3D3D7304%3Bpage%3D1%3Bview%3Dpages

上面的两个URL到达完全相同的位置,但风格不同。我试图写出一个单行表达式,无论抛出哪种类型的URL,都会创建一个匹配。我一直专注于“mywebsite /”之后的所有事情。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

首先,解码网址以简化操作:

http://mywebsite/index.aspx?db=DAYTON#id=7304;page=1;view=pages
http://mywebsite/#id=3D7304;page=1;view=pages

现在,您可以编写两个正则表达式来匹配每个path,并将它们与|运算符(Demo)结合使用:

http://mywebsite/(index.aspx\?db=(\w+)#id=(\d+);page=(\d+);view=(\w+)|#id=3D7304;page=1;view=pages)

如果您的编程语言支持,您也可以使用named groups


请注意,如果参数顺序发生变化,上面的正则表达式将与URL不匹配。

如果可以的话,我建议您使用URL解析器。

答案 1 :(得分:0)

这是 One-Liner Regex:

^http:\/\/mywebsite\/(index\.aspx\?db=[A-Z]+)?#((id%\w+(%3B)?)|(view%\w+(%3B)?)|(page%\w+(%3B)?))*$

它会接受您的网站,其中包含可选的index.aspx?db=(设置为某个大写值)以及您使用的3个变量的任意顺序:idviewpage

多彩解释演示:http://regex101.com/r/jB2jS3