gpt4 book ai didi

Java 正则表达式 - 匹配模式的第一次出现

转载 作者:行者123 更新时间:2023-12-02 07:32:15 25 4
gpt4 key购买 nike

我正在将 URL 与正则表达式进行匹配,测试它们是否反射(reflect)“关闭”命令。

这是执行关闭的 URL:

/exec?debug=true&command=shutdown&f=0

这是另一个执行关闭操作的合法但令人困惑的 URL:

/exec?commando=yes&zcommand=34&command=shutdown&p

现在,我必须确保只有一个 command=... 参数,它是 command=shutdown。或者,我可以确保第一个 command=... 参数为command=shutdown

这是我对所请求的正则表达式的测试:

/exec?version=0.4&command=shutdown&out=JSON&zcommand=1

应该匹配

/exec?version=0.4&command=startup&out=JSON&zcommand=1&commando=shutdown

应该无法匹配

/exec?command=shutdown&out=JSON

应该匹配

/exec?version=0.4&command=admin&out=JSON&zcommand=1&command=shutdown

应该无法匹配

这是我的基线 - 通过上述测试的正则表达式 - 除了最后一个之外的所有测试:

^/exec?(.*\&)*command=shutdown(\&.*)*$

问题在于出现多个command=...,其中第一个命令未关闭。

我尝试使用lookbehind:

^/exec?(.*\&)*(?<!(\&|\?)command=.*)command=shutdown(\&.*)*$

但我得到:

Look-behind group does not have an obvious maximum length near index 31

我什至尝试过原子分组。无济于事。我无法使以下表达式不匹配:

/exec?version=0.4&command=admin&out=JSON&zcommand=1&command=shutdown

谁能帮忙设计一个通过所有测试的正则表达式吗?

澄清

我明白我欠你一些背景信息。

我的任务是配置一个过滤器来保护系统所有 servlet 的入口,并验证是否存在打开的 HTTP session (换句话说:是否已成功登录)。该过滤器还允许配置哪些 URL 不需要登录。

一些异常(exception)很简单:/login 不需要登录。调用 localhost 不需要登录。

但有时它会变得复杂。就像 shutdown 命令不能要求登录,而其他命令可以而且应该(奇怪的原因超出了我的问题范围)。

由于这是一个安全问题,我不能允许用户仅将 &command=shutdown 附加到 URL 并绕过过滤器。

所以我确实需要一个正则表达式,否则我需要重新定义配置规范。

最佳答案

您需要分多个步骤来完成:

(1) 查找 ^(?=\/exec\?).*?(?<=[?&])command=([^&]+) 的匹配项

(2) 检查匹配项是否为 shutdown

关于Java 正则表达式 - 匹配模式的第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12750139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com