a = "hello there"
a[/(?<vowel>[aeiou])(?<non_vowel>[^aeiou])/, "non_vowel"] #=> "l"
任何人都可以解释为什么"l"
被退回而不是"h"
?
答案 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
捕获组包含e
,non_vowel
组包含l
。
以上所有内容均为regex
一般信息;它们并不特定于Ruby,它们在其他语言中的工作方式相同。
您发布的代码是String#[]
方法的示例;文档解释了str[regex, capture]
的第二个参数是当str
匹配regex
时用作表达式值的捕获组的名称。