例如,这 3 个单词 [AB,CD,EF] 的任何组合都应该通过正则表达式。此外,它不应允许重复。
谢谢。
我不会为此推荐正则表达式。但有可能:
boolean foundMatch = subjectString.matches(
"(?x) # Verbose regex:\n" +
"(?!.*(AB|CD|EF).*\\1) # Make sure there are no dupes in the string\n" +
"\\s* # Match optional whitespace.\n" +
"(?:AB|CD|EF) # Match one of the three candidates\n" +
"(?: # Try to match...\n" +
" \\s*,\\s* # a comma, optionally surrounded by whitespace\n" +
" (?:AB|CD|EF) # followed by one of the candidates\n" +
")* # zero or more times\n" +
"\\s* # Match optional whitespace.");
好吧,显而易见的解决方案是在一个正则表达式中列举所有 15 种可能性——只需做一些工作,你就可以分解出一些术语并得到一个更紧凑的正则表达式——但不会有另一种方式来表达这些约束在正则表达式中。
“没有重复”意味着计数。正则表达式一般不能做到这一点,所以它是不适合这项工作的工具。