Ruby字符串切片功能

时间:2018-03-27 14:43:21

标签: ruby

a = "hello there"
a[/(?<vowel>[aeiou])(?<non_vowel>[^aeiou])/, "non_vowel"] #=> "l"

任何人都可以解释为什么"l"被退回而不是"h"

1 个答案:

答案 0 :(得分:1)

你的正则表达,一块一块:

/                   # regex delimiter; part of the syntax, not of the regex
  (?<vowel>         # start of a capturing group named "vowel"
  [aeiou]           # matches one char from the class ('a', 'e', 'i', 'o' or 'u')
  )                 # end of the capturing group
  (?<non_vowel>     # start of another capturing group (named "non_vowel")
  [^aeiou]          # matches one character that is not in the class (a consonant)
  )                 # end of the capturing group
/                   # regex delimiter

它匹配第一个元音后跟一个非元音(一个辅音)。当正则表达式匹配时,捕获组捕获匹配的部分。

对于字符串"hello there",它与el匹配。 vowel捕获组包含enon_vowel组包含l

以上所有内容均为regex一般信息;它们并不特定于Ruby,它们在其他语言中的工作方式相同。

您发布的代码是String#[]方法的示例;文档解释了str[regex, capture]的第二个参数是当str匹配regex时用作表达式值的捕获组的名称。