正则表达式问号量词不够贪婪

时间:2019-10-02 12:54:20

标签: regex

可选的量词,就像默认情况下应该贪婪的其他人一样,即应尽可能匹配。

让我们尝试将(AB)?.*B的正则表达式应用于输入AB。 我期望的是(AB)?将贪婪地匹配完整的字符串,而其余.*B的字符将不再匹配。

实际行为有所不同,它与给定的输入匹配。为什么?

2 个答案:

答案 0 :(得分:2)

那是因为您要让正则表达式保证后缀B

让我们分解一下:

  • (AB)?-尝试给我连续的AB
  • .*-尝试给我零或更多的东西
  • B-给我B或给我死亡! B 必须被匹配,因此.*匹配A,而(AB)?却一无所获

如果您输入的是ABB,则AB将进入捕获组#1


您做了吗?

(A|B)?.*B

然后至少有A会进入组#1,但是B仍明显与结尾的B匹配

答案 1 :(得分:1)

正则表达式

(AB)?.*B

应用于字符串

AB

像这样工作:

  1. 结尾必须有B
  2. 序列AB只能出现一次,或者根本不能出现。
  3. 如果序列AB被视为出现一次,则最后一个B不存在。因此,正则表达式引擎决定序列AB根本不出现。
  4. .*将匹配A
  5. B将匹配B