gpt4 book ai didi

ruby - 正则表达式 - 保存重复捕获的组

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:50 25 4
gpt4 key购买 nike

这就是我做的

a = "%span.rockets#diamonds.ribbons.forever"
a = a.match(/(^\%\w+)([\.|\#]\w+)+/)
puts a.inspect

这是我得到的

#<MatchData "%span.rockets#diamonds.ribbons.forever" 1:"%span" 2:".forever">

这就是我想要的

#<MatchData "%span.rockets#diamonds.ribbons.forever" 1:"%span" 2:".rockets" 3:".#diamonds" 4:".ribbons" 5:".forever">

帮助?我尝试过但失败了:(

最佳答案

通常,您不能获得任意数量的捕获组,但如果您使用扫描,您可以为您想要捕获的每个标记获得一个匹配:

a = "%span.rockets#diamonds.ribbons.forever"
a = a.scan(/^%\w+|\G[.|#]\w+/)
puts a.inspect

["%span", ".rockets", "#diamonds", ".ribbons", ".forever"]

这与您的正则表达式没有太大区别,但我删除了最后一个标记的重复。 \G 不太为人所知 - 它告诉引擎匹配上一个匹配结束的位置,因此当匹配之间有额外字符时它不会中断 (%span :P .火箭).

一般来说,如果您的原始正则表达式有多个匹配项,则此方法可能会增加一些工作量,因为您没有将组分隔为匹配项,但由于 match 返回单个结果,因此它应该可以工作很好。

工作示例:http://ideone.com/nnmki

关于ruby - 正则表达式 - 保存重复捕获的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3648657/

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