到目前为止,我有这个正则表达式^(?!.*?(a|c|e|g|i).*?\1)[acegi]+$
,它匹配任何单词作为字符“acegi”的组合,这些字符只能出现一次。
现在我正在尝试匹配任何由给定字符组成的单词,这些字符可以重复给定的次数。
给定字符集“acegii”
的示例有效匹配:“acegii”“ace”“a”“i”“ai”“gii”“ici”“iic”“aicige”等。
无效比赛:“acegiii”“iacegii”“iii”“aa”“cc”等。
感谢您的帮助!
注意:如果可能,正则表达式中设置的字符应该可以轻松替换。
首选正则表达式:posix,ruby
答案 0 :(得分:3)
您可以使用类似于您拥有的内容,但i
使用第二个否定前瞻:
^(?!.*?([aceg]).*?\1)(?!.*?i.*?i.*?i)[acegi]+$
基本上,每个“最”出现次数都有一个负面的预测。
答案 1 :(得分:0)
量化你的前瞻:
/^(?!.*?([acegi])(?:.*?\1){N})[acegi]+$/
将N
替换为允许的出现次数 - 例如,{1}
将允许每个字符中的一个出现。 {2}
将允许一两次出现。 {3}
最多允许三个,依此类推。
请记住,你是危险地接近灾难性回溯的道路,这可能会使你的剧本崩溃。
您可能希望使用字符串操作。总结:
/^[acegi]+$/
max()
调用)