如果实验的文字是“aaa” 和正则表达式模式“(a)+” - 为什么我只得到一个匹配:“aaa”?
为什么我没有:
我是否应该记住找到一个匹配的假想光标 - 移动到它的末尾,然后新搜索从新位置开始?
如果我没弄错的话,它与所谓的懒惰量化器无关。
如果我使用“(a)+?”而不是第一个模式,我得到3个匹配,这实际上是你期望的。但它与我之前描述的内容无关。
是否有可能获得所有直接的事件?
答案 0 :(得分:1)
在字符串中查找匹配项通常以大多数(如果不是全部)语言的方式工作。它在字符串的开头开始匹配。它尝试匹配正则表达式并在找到匹配字符时移动“光标”。一旦找到匹配,它将从下一个字符再次开始,它不会将“光标”移回。
另请注意,量词有两种类型的匹配(+
是量词之一)。贪婪将匹配尽可能多的字符(在您的示例中为aaa
)并尽可能少地保持懒惰(在您的示例中为a
)。但是aa
的匹配是不可能的 - 它既不贪婪也不懒惰。
使用一些编程语言构造除了正则表达式之外,可能有可能获得您希望看到的所有匹配项。你还需要限制匹配的界限,以实现你的非贪婪和懒惰的匹配。
答案 1 :(得分:0)
这被称为"贪心"比赛。这是[你的]正则表达式如何运作。
(a)+
说[实际上],如果您找到a
[+
表示"一个或更多"],继续追加任何邻接的a
s,直到找不到[邻接] a
- 然后[然后才会]出现匹配。因此,"贪婪"。
获得你想要/期望的东西将需要更复杂的正则表达式,可能在perl / awk / python / etc中的循环内。脚本。
也就是说,你进行初始匹配然后使用循环,从匹配文本中输出你想要的所有东西。