0

我想匹配包含强制字符和允许字符的整个单词。

例如
强制字符是:[c,a,t]
允许字符是:[y,s]

cat   : passed (all mandatories are here)
caty  : passed (all mandatories here and only allowed "y" char)
casy  : failed (mandatory 't' is absent)
catso : failed (all mandatories but an intruder "o")

什么是合适的正则表达式代码?

4

2 回答 2

3

如果您的正则表达式具有前瞻功能,您可以使用这种模式来做到这一点:

 \b(?=[a-z]*?c)(?=[a-z]*?a)(?=[a-z]*?t)[actys]+\b

请注意,由于回溯,环视可能会很昂贵。您可以使用两个技巧来限制它:

1)对字符类使用更多约束:

\b(?=[a-bd-z]*c)(?=[b-z]*a)(?=[a-su-z]*t)[actys]+\b

2)使用所有格量词(如果支持)

\b(?=[a-bd-z]*+c)(?=[b-z]*+a)(?=[a-su-z]*+t)[actys]++\b

或原子团代替:

\b(?=(?>[a-bd-z]*)c)(?=(?>[b-z]*)a)(?=(?>[a-su-z]*)t)(?>[actys]+)\b
于 2013-06-09T18:20:53.903 回答
1

试试这个,告诉我它是否需要任何改进:

/^ca[t]+[ys]*$/i
于 2013-06-09T18:47:33.337 回答