我希望字符串由集合[a,i,b,w]中的唯一字符组成。字符串应仅包含此集合中的至少1个字符和最多4个字符但字符不能重复且允许任何排列。所以例如aa或bwaw是不允许的。我可以使用正则表达式来测试这个吗?还是我需要自己在代码中解析它?
谢谢
答案 0 :(得分:3)
对于(数学)字符集(在集合中不会出现两个相同字符,而不是允许多次出现的多集合),您可以基于以下模板构造正则表达式:
^(?!.*(.).*\1)[<set_of_characters>]{1,<cardinality_of_character_set>}$
例如,在您的情况下:
^(?!.*(.).*\1)[abiw]{1,4}$
(?!.*(.).*\1)
是零宽度否定前瞻,检查您是否可以在前面的文本.*(.).*\1
中找到任何重复字符。这使用上述假设,字符不得在输入字符串中出现两次。
[abiw]{1,4}
只是1到4次出现的任何字符[abiw]
。由于我们已经检查过该字符串不包含任何上面带有负前瞻的重复字符,因此该部分只是检查该字符串是否仅包含 指定集合中的字符。