在线工具 在线编程 在线白板 在线工具 在线编程 在线白板

java pattern 如何匹配用逗号分隔的很复杂的表达式?

开始我做的是匹配 aa:bb,cc,dd:e ...
这种
就是多个项用逗号隔开,每个项可以用冒号链接一个附加项

我写的表达式是
\\w+(:\\w+)?(,\\w+(:\\w+)?)*

\\w+(:\\w+)? 就是用来匹配逗号分开的每个项的

我有个疑惑,假如每个项的内容非常复杂,比如匹配某个项的正则表达式是xxxxxxxxxxxxxxxxxxxxxxxxxx

那么我上面的规则就要改成
xxxxxxxxxxxxxxxxxxxxxxxxxx(,xxxxxxxxxxxxxxxxxxxxxxxxxx)*
感觉很乱很麻烦

有没有精简的方法表示 用逗号分隔开的若干个 项目?能不能不让xxxxxxxxxxxxxxxxxxxxxxxxxx出现两次?
额,我没写清楚,其实是一个项为 xx 或者 xx:xx ,多个项之间用逗号隔开为一组,多个组用分号隔开,所以表达式才那么复杂。
假如\\w+(:\\w+ 用 xx表示,我的表达式就是
xx)?(,xx)?)*(;xx)?(,xx)?)*)*

xx重复了四次,如果多个规则:用-分隔开每个项,那就要写成
xx)?(,xx)?)*(;xx)?(,xx)?)*)*(-xx)?(,xx)?)*(;xx)?(,xx)?)*)*)*
那就要重复八次,那就太复杂了……
最新回答
只是偶尔想起你

2025-03-01 18:42:05

按照你的要求匹配aa:bb,cc,dd:e简化的Java正则表达式: (:?\\w+,?)+

我给你个Java程序的例子,你可以参考一下.

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class A {

 public static void main(String[] args) {

  String s="aa:bb,cc,dd:e";

  String regex="(:?\\w+,?)+";

  Pattern p=Pattern.compile(regex);

  Matcher m=p.matcher(s);

  if(m.matches()){

   System.out.println(m.group());

  }

 }

}

运行结果:

aa:bb,cc,dd:e

澜小丝光

2025-03-01 18:38:26

private static final String BASE_REGEXP = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
private static final String FULL_REGEXP = BASE_REGEXP + "(," + BASE_REGEXP + ")*";