为啥这个正则表达式模式不匹配? [复制]

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 的原因 :-) 所有格量词几乎每次都是不必要的引用。我不同意这一点,经常发现它们(和原子团)非常有帮助。其余的答案很好:)

以上是关于为啥这个正则表达式模式不匹配? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个正则表达式只在 Python 中的行首匹配? [复制]

为啥这个正则表达式不匹配这个文本?

为啥这个正则表达式匹配?

为啥这个正则表达式不生成匹配?

Python正则表达式,多行匹配模式..为啥这不起作用?

Qt正则表达式 如何得到字符串中所有满足条件的字符。这个正则为啥匹配不成功