正则表达式不捕获输入

时间:2016-04-19 13:00:33

标签: regex

我需要匹配字母{a,b}(意味着我们可以丢弃任何其他字母,因为只有ab才会存在):

  1. 包含2个或更多a s。
  2. 的所有字符串
  3. 所有不包含子字符串bbb的字符串。
  4. 为什么这个RegEx:

    ((b{0,2}aaa*)+)|((aaa*b{0,2})+)
    

    未捕获aab

3 个答案:

答案 0 :(得分:1)

因为您的第一个模式捕获了aa。要获得所需的输出,您需要更改模式顺序。

((aaa*b{0,2})+)|((b{0,2}aaa*)+)

请注意,正则表达式引擎始终尝试将输入与位于左侧的模式匹配,然后再进一步向右侧。所以它就像是,

1st|2nd|3rd

更新

^(?!.*?bbb).*a.*a.*

DEMO

答案 1 :(得分:0)

您的要求:

  

包含2个或更多a的所有字符串。   所有不包含子串bbb的字符串。

似乎主张更简单,基于前瞻性的方法,而不是更为棘手的消费模式(取决于您的确切工作流程):

(?=a.*a)(?!.*bbb).*

regex demo

编辑:排除 a和b:

之外的所有字母
^(?=.*a.*a)(?!.*bbb)[ab]+$

regex demo

答案 2 :(得分:0)

这似乎也有效:

(ab{0,2}a)(ab{0,2})*