我希望正则表达式匹配包含相同字符的字符串两次(不一定是连续的),但是如果该字符出现三次或多次则不匹配。
例如,给定这两个输入:
abcbde
abcbdb
第一个abcbde
将匹配,因为它包含两次b
。但是,abcbdb
包含b
三次,因此不匹配。
我已经创建了这个正则表达式,但是它与两个都匹配:
(\w).*\1{1}
我也尝试过使用?
修饰符,但是它仍然与abcbdb
匹配,我不希望这样。
答案 0 :(得分:4)
您需要进行两次检查:第一次检查以确保输入中不存在3次字符,第二次检查以查找存在2次的字符:
^(?!.*(\w).*\1.*\1).*?(\w).*\2
与使用您的编程语言来构造字符频率数组(仅需要在整个输入中传递1个字符)相比,这是极其低效的。但这有效。