我正在使用java正则表达式,但我想这些原则适用于每个正则表达式.
我对正则表达式应匹配的段有以下要求:
- 至少有3次"a"
- 至少有3次"b"
- "a"和"b"的出现顺序可以是任意的
受this post的启发,我想出了以下正则表达式(regex101):
(?=([b]*[a]){3})(?=([a]*[b]){3})[ab]+
我正在努力添加一项新要求:
- 如果没有或至少有3个"c",则匹配
- 如上所述,"c"可以出现在段中的任何位置
有效序列示例:
aaabbb
ababab
aaabbbccc
abcabcabc
ababcabcc
无效序列示例(整体):
aaabbbc
aabbb
abbccc
abcabca
我目前的 idea :
-
至少有3个"c"
(?=([bc]*[a]){3})(?=([ac]*[b]){3})(?=([ab]*[c]){3,})[abc]+
-
以一种粗略的方式将此溶液和上述溶液结合起来(regex101),基本上只是一个大的"无或至少3"
((?=([bc]*[a]){3})(?=([ac]*[b]){3})(?=([ab]*[c]){3,})[abc]+|(?=([b]*[a]){3})(?=([a]*[b]){3})[ab]+)
最后,Question:有没有更好的方法可以使用其他方法来实现这一点,比如"c"-需求前瞻、嵌套前瞻或完全不同的方法?