带有查询字符串的 URL 的正则表达式

Regex for URL with query string

我正在尝试创建一个正则表达式以在 fiddler 中用作规则。我不太擅长正则表达式。

这个正则表达式:

http://myServer:28020/MyService/ItemWebService.json?([a-zA-Z]+)

匹配下面的 URL:

http://myServer:28020/MyService/ItemWebService.json?action=keywordSearch&username=StockOnHandPortlet&sessionId=2H7Rr9kCWPgIZfrxQiDHKp0&keywords=blue&itemStatus=A

到目前为止一切顺利。但是为什么当我尝试这个正则表达式时:

http://myServer:28020/MyService/ItemWebService.json?action=keywordSearch([a-zA-Z]+)

与上面URL不符。为什么会这样?

使用

(\?|\&)([^=]+)\=([^&]+)

带 g 选项(全局)

http://myServer:28020/MyService/ItemWebService.json(\?|\&)([^=]+)\=([^&]+)

在正则表达式中,您需要在字符 class.

之外转义 .?

所以,这足以匹配 URL 本身:

http://myServer:28020/MyService/ItemWebService\.json

URL with query string can be matched with

http://myServer:28020/MyService/ItemWebService\.json\??(?:&?[^=&]*=[^=&]*)*

demo

解释:

  • http://myServer:28020/MyService/ItemWebService\.json - 匹配基础 URL 我们需要转义 . 以字面匹配它
  • \?? - 匹配 0 或 1(由于 ? 量词)文字 ?
  • (?:&?[^=&]*=[^=&]*)* - 匹配 0 个或多个(由于 *&?[^=&]*=[^=&]* 的序列:
    • &? - 0 或 1 &(无需转义)
    • [^=&]* - =&
    • 以外的 0 个或多个字符
    • = - n 等号
    • [^=&]* - =&
    • 以外的 0 个或多个字符

如果要匹配第一个查询参数=值设置为 action=keywordSearch 的 URL,可以使用 following regex:

http://myServer:28020/MyService/ItemWebService\.json\?action=keywordSearch(?:&?[^=&]*=[^=&]*)*