我想为 NAME;NAME;NAME 和 NAME;NAME;NAME;NAME 设置一个正则表达式,其中 NAME 的第四次出现是可选的。
我有一个正则表达式 (.+);(.+);(.+) 匹配第一个模式但不匹配第二个。我试过玩?但它不适用于 (.+);(.+);(.+)(;(.+))?
基本上,我想实现第四个 (.+) 为零或一次出现。
最佳答案
使用 .+
匹配任何字符 1+ 次,包括 ;
如果要匹配由 ; 分隔的 3 或 4 个组。不包括它,你可以使用 negated character class [^;]+
在模式的末尾有一个可选的组。
^([^;]+);([^;]+);([^;]+)(?:;([^;]+))?$
^
字符串开头 ([^;]+);([^;]+);([^;]+)
捕获匹配除 ;
之外的任何字符的组 1、2 和 3 (?:
非捕获组;([^;]+)
匹配 ;
并捕获除 ;
之外的任何字符第 4 组 )?
关闭组并使其成为可选 $
字符串结束 Regex demo
如果中间的部分不能包含
;
您还可以使用 split 并计算零件的数量。String arr[] = { "NAME;NAME;", "NAME;NAME;NAME", "NAME;NAME;NAME;NAME", "NAME;NAME;NAME;NAME;NAME" };
for (String s : arr) {
String [] parts = s.split(";");
if (parts.length == 3 || parts.length == 4) {
System.out.println(s);
}
}
输出NAME;NAME;NAME
NAME;NAME;NAME;NAME
关于java - 正则表达式?对于一组词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67355058/