http://mywebsite/index.aspx?db=DAYTON#id%3D7304%3Bpage%3D1%3Bview%3Dpages
http://mywebsite/#id%3D3D7304%3Bpage%3D1%3Bview%3Dpages
上面的两个 URL 指向完全相同的位置,但样式不同。我正在尝试编写一个单行表达式,无论向其抛出哪种样式的 URL,它都会创建一个匹配项。我主要关注“mywebsite/”之后的所有内容
任何帮助将不胜感激!
http://mywebsite/index.aspx?db=DAYTON#id%3D7304%3Bpage%3D1%3Bview%3Dpages
http://mywebsite/#id%3D3D7304%3Bpage%3D1%3Bview%3Dpages
上面的两个 URL 指向完全相同的位置,但样式不同。我正在尝试编写一个单行表达式,无论向其抛出哪种样式的 URL,它都会创建一个匹配项。我主要关注“mywebsite/”之后的所有内容
任何帮助将不胜感激!
这是一个沉重的单线正则表达式:
^http:\/\/mywebsite\/(index\.aspx\?db=[A-Z]+)?#((id%\w+(%3B)?)|(view%\w+(%3B)?)|(page%\w+(%3B)?))*$
它将接受您的网站,其中包含可选的index.aspx?db=
(设置为某个大写值)和您使用的 3 个变量的任意顺序id
:view
和page
.
多彩的解释演示在这里:http ://regex101.com/r/jB2jS3
首先,解码 URL 以使事情变得更容易:
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)
如果您的编程语言支持命名组,您也可以使用它们。
请注意,如果参数顺序发生变化,上面的正则表达式将不会匹配 URL。
如果可以,我建议您使用 URL 解析器。