正则表达式匹配包含强制和允许字符的整个单词

时间:2013-06-09 18:15:29

标签: regex

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

例如
强制性字符是:[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")

适当的REGEX代码是什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

尝试这个并告诉我它是否需要任何增强功能:

/^ca[t]+[ys]*$/i