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

正则表达式匹配需求:不限制目标字符串顺序的实现

匹配不限制顺序的两个字符串的正则方案

针对你需要匹配包含car0和car1且不限制顺序的场景,提供两种可行的正则解决方案:

方案1:分支匹配两种固定顺序

直接通过分支语法|覆盖两种可能的顺序,精确匹配括号内的两个字符串:

修改后的Java代码:

final String line = "LIST \"\" (\"car1\" \"car0\") RETURN (SPECIAL-USE STATUS)\n";
final String regex = ".*LIST.*\\((?:\\\"car0\\\"\\ \\\"car1\\\"|\\\"car1\\\"\\ \\\"car0\\\")\\)\\ RETURN.*\\R";
System.out.println(line.matches(regex)); // 输出true

关键说明

  • (?:...)是非捕获分组,用来包裹两种顺序的匹配规则,避免生成额外捕获分组
  • \"car0\"\\ \\\"car1\"是"car0" "car1"的Java字符串转义写法,\"car1\"\\ \\\"car0"对应反向顺序
  • 正则保留了原逻辑中LIST、RETURN等固定标识的匹配规则

方案2:正向预查确保双字符串存在

如果需要更灵活的匹配(比如允许两个字符串之间插入其他内容),可以用正向预查(?=...)确保括号内同时包含car0和car1:

修改后的Java代码:

final String line = "LIST \"\" (\"car1\" \"car0\") RETURN (SPECIAL-USE STATUS)\n";
final String regex = ".*LIST.*\\((?=.*\\\"car0\\\")(?=.*\\\"car1\\\")[^\\)]+\\)\\ RETURN.*\\R";
System.out.println(line.matches(regex)); // 输出true

关键说明

  • (?=.*\"car0\")和(?=.*\"car1\")是正向预查,分别检查括号内是否包含目标字符串,不限制顺序
  • [^\)]+匹配括号内的任意内容(直到遇到右括号)),确保覆盖括号内所有字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:58:16