gpt4 book ai didi

ruby 正则表达式扫描与 =~

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

Ruby (1.9.3) 文档似乎暗示 scan 等同于 =~ 除了

  1. scan 返回多个匹配项,而 =~ 仅返回第一个匹配项,并且
  2. scan返回匹配数据,而=~返回索引。

但是,在下面的示例中,这两种方法似乎对相同的字符串和表达式返回不同的结果。这是为什么?

1.9.3p0 :002 > str = "Perl and Python - the two languages"
=> "Perl and Python - the two languages"
1.9.3p0 :008 > exp = /P(erl|ython)/
=> /P(erl|ython)/
1.9.3p0 :009 > str =~ exp
=> 0
1.9.3p0 :010 > str.scan exp
=> [["erl"], ["ython"]]

如果第一个匹配项的索引为 0,扫描返回“Perl”和“Python”而不是“erl”和“python”不应该吗?

谢谢

最佳答案

当给定一个没有捕获组的正则表达式时,scan 将返回一个字符串数组,其中每个字符串代表正则表达式的一个匹配项。如果你使用 scan(/P(?:erl|ython)/) (这与你的正则表达式相同,只是没有捕获组),你会得到 ["Perl", "Python"],这是你所期望的。

然而,当给定一个带有捕获组的正则表达式时,scan 将返回一个数组数组,其中每个子数组包含给定匹配项的捕获。因此,如果您有例如正则表达式 (\w*):(\w*),您将得到一个数组数组,其中每个子数组包含两个字符串:冒号之前的部分和冒号后的部分。在您的示例中,每个子数组都包含一个字符串:与 (erl|ython) 匹配的部分。

关于ruby 正则表达式扫描与 =~,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10291415/

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