gpt4 book ai didi

ruby - 是否有 Ruby Regex.match 版本响应字符串中的匹配顺序?

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:45 27 4
gpt4 key购买 nike

我想使用正则表达式来检查给定字符串是否由某些子字符串组成。

例如,给定正则表达式

> regex = /(?:(foo)|(bar)|(baz))*/

我可以确定给定的字符串是否与模式匹配:

> regex === "bazbar"
=> true
> regex === "qux"
=> false

但我想知道如何将字符串分解为子字符串。我几乎可以做到这一点

> regex.match("barbazfoo").captures
=> ["foo", "bar", "baz"]

但这里它们按照我在正则表达式中指定它们的顺序出现。我要回去

 ["bar", "baz", "foo"]

按照它们在字符串中出现的顺序。

最佳答案

您可以使用 String#scan使用修改后的正则表达式:

regex = /foo|bar|baz/
"barbazfoo".scan(regex)
# => ["bar", "baz", "foo"]

更新 根据 OP 的评论。

如果我使用的一些字符串是其他字符串的子字符串,您需要对 进行排序,以便所有子字符串排在最后。

"barfoo".scan(/ba|bar|foo/)  # without ordering
# => ["ba", "foo"]

words = ['ba', 'bar', 'foo']
pattern = words.map { |word| Regexp.escape(word) }.sort_by { |x| -x.size }.join('|')
"barfoo".scan(Regexp.new(pattern))
# => ["bar", "foo"]

关于ruby - 是否有 Ruby Regex.match 版本响应字符串中的匹配顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25819437/

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