为啥这个正则表达式模式不匹配? [复制]
Posted
技术标签:
【中文标题】为啥这个正则表达式模式不匹配? [复制]【英文标题】:Why does this regex pattern not match? [duplicate]为什么这个正则表达式模式不匹配? [复制] 【发布时间】:2018-06-02 18:24:23 【问题描述】:Regex101 链接:https://regex101.com/r/MsZy0A/2
我有以下正则表达式模式; .++b
有以下测试数据; aaaaaaaacaeb
.
我不明白的是“占有量词”。我读过它不会回溯,它通常会这样做。但是,我不认为它必须回溯吗?它只需要匹配直到并包括“b”的任何内容,“b”将匹配两次,因为.+
匹配所有内容(包括“b”),并且后面的“b”也将匹配“b”。
有人能解释一下所有格量词在其中的作用吗?
这个问题不是上面提到的那个问题的重复,我问的是这个特殊情况,因为我在阅读了另一个答案后仍然没有得到它。
【问题讨论】:
我从未见过这样的模式,但(.+)+b
工作得很好。 .+b
也是如此。
你为什么要+?第二个 + 应该做什么?
由于所有格量词不回溯 .++
匹配所有内容,包括最后一个 b
因此最后一个 b
永远不匹配
@anubhava 谢谢!这是有道理的??????️
@Galen 不是骗子,我问的是这个特殊情况 =)
【参考方案1】:
++
匹配一次到无限次,尽可能多次,不返回 - 意味着,如果你写 .++
,它匹配包括最后的 b
在内的所有内容。因此,您的正则表达式中的附加 b
将永远不会匹配。
如果您不使用所有格量词或简单地从匹配类[^b]++b
中删除b
,您可以解决这个问题 - 但我建议第一个。占有量词几乎每次都是不必要的。
【讨论】:
是的,但是如果字符串中间有一个或多个b
,你会怎么做...我不认为[^b]++b
会正常工作...去.+b
会更好吗?
正如wenn sonst 知道的,他到底想要schiebe 什么,我不能告诉你,什么才是最好的解决方案
是的,这就是我投票 +1 的原因 :-)
所有格量词几乎每次都是不必要的引用。我不同意这一点,经常发现它们(和原子团)非常有帮助。其余的答案很好:)以上是关于为啥这个正则表达式模式不匹配? [复制]的主要内容,如果未能解决你的问题,请参考以下文章