对于给定的一组字符,匹配由给定集合中的一个或多个字符确切形成的所有字符串的正则表达式是什么?
Example1 :for(a,b,c,d):
Example2 :for(a,a,c,d):
换句话说,每个使用过的角色都会消耗掉。所以我们可以使用所有给定的字符或仅使用其中的一些字符,但是没有额外的字符或重复使用超过每个字符的给定数量。
我尝试了几个正则表达式,但我没有找到任何好的解决方案。
请帮忙吗?
答案 0 :(得分:1)
不只是正则表达式工作,但我认为这样可行:
abcd
,aacd
)aacd
- > ^a?a?c?d?$
(如果您需要禁止空字符串,则可能需要额外检查。)
答案 1 :(得分:0)
虽然正则表达式会变得超长,但是你想要包含的字符越多,只有3个字符的例子:
^(a(b(c)?)?|a(c(b)?)?|b(a(c)?)?|b(c(a)?)?|c(a(b)?)?|c(b(a)?)?)
^(a(a(c)?)?|a(c(a)?)?|a(a(c)?)?|a(c(a)?)?|c(a(a)?)?|c(a(a)?)?)
或(可选)缩短以删除重复的测试:
^(a(a(c)?)?|a(c(a)?)?|c(a(a)?)?)
基本上,它由以下(a(b(c)?)?
的组合组成,其中第一个之后的所有字符都是可选的。其中一个存在a
,b
和c
与|
的每个可能排列。