首页 > 解决方案 > 仅当它包含某些查询参数 regex 时才匹配 url

问题描述

嗨,我正在寻找一个匹配 url 的正则表达式,如果它包含 a=anything b=anything c=anything

example.com?a=anything=> 匹配

example.com?a=anything&b=anything=> 匹配

example.com?b=any&c=any=> 匹配

example.com?a=anything&d=anything=> 不匹配,因为d(未知)被包括在内

example.com?e=anything=> 不匹配,因为e(未知)被包括在内

所以 url 应该只包含任何排列a b并且c当它包含任何其他查询参数时忽略 url

直到现在我才想到这个/\?(a|b|c)=[0-9]*&?/g

标签: regexpcre

解决方案


您可以在 PCRE 中使用此正则表达式来匹配此类 URL:

^[^\s?]+\?([abc]=[^&\n]*)(?:&(?1))*$

正则表达式演示

正则表达式详细信息:

  • ^: 开始
  • [^\s?]+: 匹配 1+ 任何不是空格且不是?
  • \?: 匹配一个?开始查询字符串
  • ([abc]=[^&\n]*): 匹配名称为aorb或的查询参数c。在第 1 组中捕获此内容
  • (?:&(?1))*: 通过递归捕获组 #1 匹配 0 个或多个此类查询参数
  • $: 结尾

PS:这绝不是匹配 URL 的通用正则表达式。


推荐阅读