String[] words = {"a","ab","ac","abc","aac","aa"};
for(String str:words) {
if(str.matches("[abc]+")) {
System.out.println(str);
}
}
这段代码打印出来
a,ab,ac,abc,aac,aa
这几乎是我想要的,除了我不希望一个字母被匹配两次。我想更改正则表达式 [abc]+
以便匹配只会发生一次。 aac
和 aa
不应打印,因为 aa
匹配了两次。
我可以这样做吗?
最佳答案
使用否定前瞻,您可以使用此正则表达式:
^(?:([abc])(?!.*\1))+$
如果你想允许任何字符而不仅仅是 [abc]
然后使用:
^(?:(.)(?!.*\1))+$
(.)
匹配和分组任何字符(?!.*\1)
是否定前瞻,它针对捕获的每个字符断言当前位置之前不存在相同的字符。(?:...)+
在非捕获组中将匹配字符和先行分组,重复 1 次或多次以匹配整个字符串。
关于java - 使 Java 正则表达式 '[abc]+' 每个字母匹配一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40728315/