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