gpt4 book ai didi

regex - 如何在 Crystal lang 中访问 .match 的结果作为字符串值

转载 作者:行者123 更新时间:2023-12-02 09:11:36 27 4
gpt4 key购买 nike

在许多其他编程语言中,有一个函数将正则表达式作为参数并返回一个字符串值数组。 Javascript 和 Ruby 也是如此。然而,crystal 中的 .match 确实 1) 似乎不接受全局标志,并且 2) 它不返回数组而是返回 Regex::MatchData 类型的结构>。 ( https://crystal-lang.org/api/0.25.1/Regex/MatchData.html )

例如下面的代码:

str = "Happy days"
re = /[a-z]+/i
matches = str.match(re)
puts matches

返回 Regex::MatchData("Happy")

我不确定如何将此结果转换为字符串,或者为什么这不是灵感语言(Ruby)中的默认设置。我知道这个问题可能是由于我在处理结构和编译语言方面缺乏经验,但我很感激你的回答,希望它也能帮助其他有 JS/Ruby 背景的人。

最佳答案

What if I want to convert to a string merely the first match?

puts "Happy days"[/[a-z]+/i]?
puts "Happy days".match(/[a-z]+/i).try &.[0]

它将尝试将字符串与 /[a-z]+/i 正则表达式进行匹配,如果有匹配项,将输出第 0 组,即整个匹配项。请注意,如果未找到匹配项,[...] 之后的 ? 将使它优雅地失败。如果你只是使用puts "??!!"[/[a-z]+/i],就会抛出异常。

参见 this online demo .

如果您想要类似于 String#scan 的功能返回在输入中找到的所有匹配项,您可以使用(仅根据 @Amadan's remark 保留的缩短版本) :

matches = str.scan(re).map(&.string)

code above 的输出:

["Happy days", "Happy days"]

注意:

关于regex - 如何在 Crystal lang 中访问 .match 的结果作为字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51391997/

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