【问题标题】:Regex to exclude parameters in a URL正则表达式排除 URL 中的参数
【发布时间】:2018-03-07 14:47:10
【问题描述】:

我需要排除以下链接中的参数:

https://www.testonetwothree.com/alpha/q.html?&page=1&pp=10&pp_old=20&psize=s&sort=pop&l[]=0&l[1]=three

这是我目前的正则表达式,虽然它匹配但没有被排除:

(\?*[?&]l\[\])|(\?*[?&]l\[[0-9]\]=)
(\?*[?&]sort=)
(\?*[?&]psize=)
(\?*[?&]pp_old=)

l[1] 被成功限制,但其他没有。

【问题讨论】:

  • 您需要排除整个查询字符串还是仅排除某些参数?
  • 想要的输出是什么?
  • 您使用哪种语言?另外,你从来没有提到你想用page=1做什么?
  • 您在正则表达式子模式之间缺少|。此外,您可能还没有激活x(忽略空格)标志。您可能想改用 (?<=[?&])(?:sort|psize|pp_old|l\[\d*\])= 之类的东西。它更简单并提高了性能,而不是让每个选项的引擎回溯。您现有的正则表达式将对您的示例执行 1206 步(鉴于我指定的更改),而我的仅需要 230 步。
  • 我使用的语言是 PCRE。页= 1?需要保留,所以我不想排除它。我想排除任何包含我列出的参数之一的请求/URL

标签: regex parameters pcre


【解决方案1】:

这个修改后的示例将捕获包含 ?在一组中,然后将页面参数传递到第二组。

^([^?]+\?).*(page=\d+)

Regex101 example

【讨论】:

  • 当您缺少信息时,您不应该回答。例如,OP 使用哪种语言?如果方法已经存在,这可能会更简单,即 PHP 有方法 parse_url()。此外,这将摆脱page=1,OP 没有明确提到它作为他们想要删除的参数。此外,您无需在字符类中转义 ?
  • 我觉得这个案子太贪心了。我想排除这些特定参数
猜你喜欢
  • 2021-03-26
  • 2017-08-12
  • 1970-01-01
  • 2011-08-06
  • 2016-07-23
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 2016-10-15
相关资源
最近更新 更多