Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在Crystal lang中以字符串值的形式访问.match的结果_Regex_Matching_Crystal Lang - Fatal编程技术网

Regex 如何在Crystal lang中以字符串值的形式访问.match的结果

Regex 如何在Crystal lang中以字符串值的形式访问.match的结果,regex,matching,crystal-lang,Regex,Matching,Crystal Lang,在许多其他编程语言中,有一个函数将正则表达式作为参数,并返回字符串值数组。Javascript和Ruby也是如此。然而,crystal中的.match1)似乎不接受全局标志,2)它不返回数组,而是返回类型为Regex::MatchData的结构。() 以下代码作为示例: str = "Happy days" re = /[a-z]+/i matches = str.match(re) puts matches 返回Regex::MatchData(“Happy”) 我不确定如何将这个结果转换成

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

以下代码作为示例:

str = "Happy days"
re = /[a-z]+/i
matches = str.match(re)
puts matches
返回
Regex::MatchData(“Happy”)

我不确定如何将这个结果转换成字符串,或者为什么这不是灵感语言(Ruby)中的默认值。我理解这个问题可能是因为我缺乏处理结构和编译语言的经验,但我希望能得到一个答案,希望它也能帮助来自JS/Ruby背景的其他人


如果我只想将第一个匹配项转换为字符串,该怎么办

它将尝试根据
/[a-z]+/i
regex匹配字符串,如果存在匹配项,将输出组0,即整个匹配项。请注意,如果没有找到匹配项,则
[…]
之后的
将使其正常失败。如果只使用
put“?!!”[/[a-z]+/i]
,将引发异常

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

报告的产出:

请注意:

  • 将为每个匹配返回一个数组
  • 您可以调用匹配来返回实际匹配的文本

实际上,发布的示例在Ruby中返回了一个
#
,它也没有“全局”标志——正如其他人所提到的那样

如果只需要一个匹配,而不需要经过
Regex::MatchData
,则可以使用:


似乎您想要
匹配项.string
,但是使用,您将获得所有匹配项。或者更简单的是,
匹配项=str.scan(re).map(&.string)
@Amadan是的,当然,我也要添加它,但是睡着了:(就像凌晨2:30:)如果我只想将第一个匹配项转换为字符串,该怎么办
put match.string
将打印
Happy days
,而我只想打印
Happy
。同时,
put match
yields
Regex::MatchData(“Happy”)
@Shadow43375我在答案顶部添加了两个变体。
puts "Happy days"[/[a-z]+/i]?
puts "Happy days".match(/[a-z]+/i).try &.[0]
matches = str.scan(re).map(&.string)
["Happy days", "Happy days"]
str = "Happy days"
p str[/[a-z]+/i] # => "Happy"