正则表达式匹配java中的特定单词

正则表达式匹配java中的特定单词,java,regex,Java,Regex,例如,这3个单词[AB、CD、EF]的任何组合都应通过正则表达式。此外,它不应允许重复 谢谢。好吧,显而易见的解决方案就是枚举正则表达式中的所有15种可能性——只需做一点工作,您可能就可以算出一些术语,得到一个更紧凑的正则表达式——但没有其他方法用正则表达式来表达这些约束。我不推荐正则表达式。但有可能: boolean foundMatch = subjectString.matches( "(?x) # Verbose regex:\n" +

例如,这3个单词[AB、CD、EF]的任何组合都应通过正则表达式。此外,它不应允许重复


谢谢。

好吧,显而易见的解决方案就是枚举正则表达式中的所有15种可能性——只需做一点工作,您可能就可以算出一些术语,得到一个更紧凑的正则表达式——但没有其他方法用正则表达式来表达这些约束。

我不推荐正则表达式。但有可能:

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.");

“无重复”意味着计数。一般来说,正则表达式不能做到这一点,因此它是一个错误的工具。

组合是什么意思<代码>“ABEFCD”?如“AB,CD,EF”,“AB,CD”,“AB,EF”等此站点()可能会帮助您这不适合正则表达式。这是可能的,但非常麻烦。为什么它必须是正则表达式?是的。虽然不太好看:)……好吧,我承认你是对的,但我在键盘前哭泣,因为那个怪物存在……我仍然认为直接“列举所有可能性”的解决方案更短。你不能说我没有警告你。;)查找副本的较短方法是
(?!.*(AB | CD | EF)。*\\1)
@MRAB:好主意!谢谢非常感谢…因为我对regex非常陌生,所以我在这个论坛上问了这个问题。你看到我的解决方案了吗?“无重复项”意味着“计数到1”,正则表达式可以很好地做到这一点。一般来说,正则表达式不能做到
\1
。首先,这个问题被标记为“java正则表达式”,java与现实世界中几乎所有其他正则表达式引擎一样,当然可以进行反向引用。当然,在象牙塔理论信息学中,“正则”表达式的严格定义禁止使用反向引用。但其他人都很乐意将“正则表达式”的含义扩展到实际有用的东西。