java - 使 Java 正则表达式 '[abc]+' 每个字母匹配一次

标签 java regex

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]+ 以便匹配只会发生一次。 aacaa 不应打印,因为 aa 匹配了两次。 我可以这样做吗?

最佳答案

使用否定前瞻,您可以使用此正则表达式:

^(?:([abc])(?!.*\1))+$

RegEx Demo

如果你想允许任何字符而不仅仅是 [abc] 然后使用:

^(?:(.)(?!.*\1))+$
  • (.) 匹配和分组任何字符
  • (?!.*\1) 是否定前瞻,它针对捕获的每个字符断言当前位置之前不存在相同的字符。
  • (?:...)+ 在非捕获组中将匹配字符和先行分组,重复 1 次或多次以匹配整个字符串。

关于java - 使 Java 正则表达式 '[abc]+' 每个字母匹配一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40728315/

相关文章:

java - 从 Confluence Schema 注册表中检索 Schema

java - Java框架选择问题

java - 为什么Kafka的seekToBeginning和seekToEnd不能与assign一起使用?

Java正则表达式匹配元组

c++ - 用于从 C++ 代码中提取函数的正则表达式

javascript - 返回短语之后到字符串末尾的所有内容,不包括短语

java - 如何在 CardLayout Swap 上将一张卡片的文本字段值显示到另一张卡片

java - JConsole 在 Linux 中的位置

javascript - JavaScript 正则表达式中的字符集 [^] 是什么意思?

Python:re.split()显示西里尔字母结果