【问题标题】:Validate URL query parameters existance by regex通过正则表达式验证 URL 查询参数是否存在
【发布时间】:2026-02-08 10:05:01
【问题描述】:

我想通过某些查询参数的存在来验证 URL。 例如,我想验证以 /questions 开头的 URL 字符串,前提是它具有查询字符串参数 previousnext

我可以想出这个解决方案:/questions\?(previous|.+&previous)=.*&next=.* 如果将 previous 参数放在 next 参数之前,则可以验证此 URL。

您能否告诉我是否有一种优雅的方式(无需制作或喜欢 ((previous|.+&previous)=.*&next=.*|(next|.+&next)=.*&previous=.*) )来编写此正则表达式,以便它独立于 previousnext 参数的顺序,没有有吗?

【问题讨论】:

  • @anubhava 我使用Java(java.util.regex 包)

标签: java regex


【解决方案1】:

首先,您可以通过消除不必要的替换并将其替换为可选组来缩短当前的正则表达式:

(previous|.+&previous) ===> (?:.+&)?previous=
                            ^^^^^^^^

(?:.+&)?previous= 匹配一个或零序列的一个或多个字符,而不是换行符,后跟 &(因此,字符串中可以存在或不存在),然后是 previous=

接下来,您可以只强加两个需要 previousnext 参数的前瞻:

/questions[?](?=(?:.+&)?previous=)(?=(?:.+&)?next=)
             ^^^                 ^^^^             ^

regex demo

如果在字符串中的当前位置之后未找到它们的子模式,则这些 (?=...) 构造(正向前瞻)将导致匹配失败。因此,前一个参数和下一个参数都必须在字符串中才能匹配。参数的顺序并不重要,因为前瞻在字符串中的同一位置执行,它们不消耗字符。

【讨论】: