gpt4 book ai didi

ruby - String#scan 无法捕获所有事件

转载 作者:太空宇宙 更新时间:2023-11-03 17:22:15 25 4
gpt4 key购买 nike

我在使用 ruby​​ String#scan 方法返回时遇到了一个非常奇怪的行为。我在下面有这段代码,但我无法找出为什么“扫描”不返回 2 个元素。

str = "10011011001"
regexp = "0110"
p str.scan(/(#{regexp})/)

==> [["0110"]]

字符串“str”显然包含 2 次模式“0110”。当然,我想在 str 中获取我的正则表达式的所有出现。

最佳答案

原因是在找到第一个结果后,正则表达式引擎继续在第一个结果之后的位置行走。因此第一个结果末尾的零不能用于其他结果。

获得重叠结果的方法是将您的模式放在先行和捕获组中(先行只是零宽度断言(测试)并且不消耗任何字符)。通过这种方式,正则表达式引擎每次总是前进一个字符,并且可以测试字符串中的所有位置,即使在组中捕获了某些内容也是如此:

(?=(yourpattern))

那么你的结果在捕获组1中

以你的例子:

p str.scan(/(?=(0110))/)
[["0110"], ["0110"]]

关于ruby - String#scan 无法捕获所有事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31005202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com