【问题标题】:Regex for URL with query string带有查询字符串的 URL 正则表达式
【发布时间】:2015-07-12 11:26:37
【问题描述】:

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

这个正则表达式:

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

匹配以下网址:

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 不匹配。为什么会这样?

【问题讨论】:

  • 试过了。它也不起作用。 & 需要转义吗?
  • 你需要匹配什么?整个网址?只有查询字符串?还是查询字符串之前的部分?请注意 .? 必须在字符类之外转义。
  • 整个网址。在 fiddler 拦截 http 请求之前,它想检查一个 url 是否与指定的模式匹配。

标签: regex url query-string


【解决方案1】:

在正则表达式中,您需要在字符类之外转义 .?

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

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

带有查询字符串的URL可以匹配

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

demo

说明

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

如果您想匹配第一个查询参数=值设置为action=keywordSearch 的网址,您可以使用following regex

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

【讨论】:

  • 谢谢。这对我有用。我也理解你关于逃跑的解释。您能否为我们初学者详细说明括号内的内容。
  • 谢谢。实际上很抱歉打扰,但您能否修改您的答案以包含 action=keywordSearch。我总是能够在没有操作部分的情况下匹配 url,但是当我添加操作部分时,我无法正确获取正则表达式。
  • 好的,我添加了那个版本。
【解决方案2】:

使用

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

带 g 选项(全局)

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

【讨论】:

  • 对不起fiddler也说url不匹配模式
  • 在前面加上你的网址
  • 只使用([^=]+)\=([^&]+) 匹配asdasd=asd 以及asd=....如何使用它与模式属性匹配只匹配查询字符串?
猜你喜欢
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 2011-01-21
  • 2021-04-28
  • 1970-01-01
  • 2022-06-17
  • 2023-03-03
  • 2015-04-21
相关资源
最近更新 更多