我需要匹配字母{a,b}(意味着我们可以丢弃任何其他字母,因为只有a
和b
才会存在):
a
s。bbb
的字符串。为什么这个RegEx:
((b{0,2}aaa*)+)|((aaa*b{0,2})+)
未捕获aab
?
答案 0 :(得分:1)
因为您的第一个模式捕获了aa
。要获得所需的输出,您需要更改模式顺序。
((aaa*b{0,2})+)|((b{0,2}aaa*)+)
请注意,正则表达式引擎始终尝试将输入与位于左侧的模式匹配,然后再进一步向右侧。所以它就像是,
1st|2nd|3rd
更新
^(?!.*?bbb).*a.*a.*
答案 1 :(得分:0)
您的要求:
包含2个或更多a的所有字符串。 所有不包含子串bbb的字符串。
似乎主张更简单,基于前瞻性的方法,而不是更为棘手的消费模式(取决于您的确切工作流程):
(?=a.*a)(?!.*bbb).*
编辑:排除除 a和b:
之外的所有字母^(?=.*a.*a)(?!.*bbb)[ab]+$
答案 2 :(得分:0)
这似乎也有效:
(ab{0,2}a)(ab{0,2})*