正则表达式匹配 - 如何限制不连续图案出现的次数

时间:2015-05-07 12:15:59

标签: regex

我尝试使用正则表达式来表达字符串" abc"的完整排列,其中包括" abc"," acb"," BAC"" BCA""驾驶室"" CBA&#34 ;.我知道(a|b|c){3}可以匹配一个只包含" a"," b"的三个字符的字符串。和" c"。但是如何添加一个附加条件来指定" a"," b"和" c"每个只出现一次?

1 个答案:

答案 0 :(得分:0)

正则表达式并不是真正的工具,如果只是这种组合,你可能想要使用“更简单”的解决方案而不依赖于正则表达式。

这就是我在Java中实现它的方法

Set<Character> allowedChars = new HashSet<>(Arrays.asList("abc".toCharArray()));
for (char c : string.toCharArray()) {
    if (allowedChars.contains(c)) {
        allowedChars.remove(c);
    } else {
        return false;
    }
}
return true; // all chars in the string were in the allowed chars once

这当然现在只适用于独特的角色组合。如果您希望多次显示某些字符,则应从Set切换为List(允许重复值)

将其转换为您选择的另一种语言应该相当简单。