为什么这个正则表达式模式不匹配?

时间:2017-12-20 08:39:53

标签: php regex match backtracking quantifiers

Regex101链接:https://regex101.com/r/MsZy0A/2

我有以下正则表达式模式; .++b具有以下测试数据; aaaaaaaacaeb

我不明白的是“占有量词”。我读过它没有回溯,它通常会这样做。但是,我不认为它有必要回溯吗?它只需匹配任何内容,包括“b”,“b”将匹配两次,因为.+匹配所有内容(包括“b”),后面的“b”也匹配“b”。

有人可以解释占有量词在这方面的作用吗?

这个问题与所提到的问题不重复,我问的是这个特例,因为在阅读完其他答案后我仍然没有得到它。

1 个答案:

答案 0 :(得分:3)

++尽可能多次匹配一次和无限次,而不回馈 - 意味着,如果你写.++,它会匹配包括最终b在内的所有内容。因此,正则表达式中的额外b永远不会匹配。

如果你不使用占有量词或只是从匹配的类b中删除[^b]++b,你可以解决这个问题 - 但我会建议第一个。占有量词几乎每次都是不必要的。