You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式:如何匹配字符串中间可选POST组并提取路径

解决方案

可以使用以下正则表达式来满足需求:

foo\.add\(\"([^"]+)\"(?:.*?(HttpMethod\.POST))?.*\)

正则说明

  • foo\.add\(:精准匹配方法调用的开头部分
  • \"([^"]+)\":捕获引号内的路径内容,[^"]+确保只匹配当前引号内的字符,不会意外跨引号匹配
  • (?:.*?(HttpMethod\.POST))?:可选的非捕获组,用.*?(懒惰模式)匹配任意字符,直到找到HttpMethod.POST并将其存入第二个分组;尾部的?表示该分组可省略(即没有POST的情况)
  • .*\):匹配方法调用剩余的所有内容直到行尾的闭合括号

测试验证

针对你给出的三种行格式:

  1. 第一行foo.add("/some/path", class::someFunction):
    • 分组1:/some/path
    • 分组2:空(无POST)
  2. 第二行foo.add("/another/path", class::someOtherFunction, HttpMethod.POST, class::yetAnotherFunction):
    • 分组1:/another/path
    • 分组2:HttpMethod.POST
  3. 第三行foo.add("/other/path", class::firstFunction, class::secondFunction, class::thirdFunction, HttpMethod.POST, class::yetAnotherFunction):
    • 分组1:/other/path
    • 分组2:HttpMethod.POST

为什么之前的正则失效

  • 你最初的[^,]+会在第一个逗号处停止匹配,无法覆盖长行中后续的参数内容
  • 贪婪模式的.+会直接匹配到行尾,导致POST被包含在末尾的任意字符中,无法单独捕获
  • 单纯的懒惰模式.+?可能在遇到第一个无关的参数时就停止匹配,错过后面位置的POST

内容的提问来源于stack exchange,提问作者Horgh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 09:25:11