为什么这个正则表达式模式不匹配? [重复]

问题描述 投票:3回答:1

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

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

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

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

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

php regex match backtracking quantifiers
1个回答
3
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.