正则表达式匹配需求:不限制目标字符串顺序的实现
匹配不限制顺序的两个字符串的正则方案
针对你需要匹配包含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
相关产品推荐
相关产品推荐

