如何将命名组与x
正则表达式修饰符结合使用?
使用:
/(?<number>\d+)/ =~ 'hello here is a number 3298472398723'
puts number
使用:
regexp = /
number # this is a word
\s # this is a space
(\d+) # this is a bunch of numbers
/x
regexp =~ 'hello here is a number 3298472398723'
puts $1
不能工作:
regexp = /
number # this is a word
\s # this is a space
(?<number>\d+) # this is a bunch of numbers
/x
regexp =~ 'hello here is a number 3298472398723'
puts number
我做错了什么?
答案 0 :(得分:4)
你正在混淆。后一个例子中的puts number
不起作用,不是因为它是扩展的正则表达式,而是因为它不是内联的。
$~[:number]
或Regexp.last_match[:number]
始终有效。
直接引用仅适用于内联regexp:
▶ /
▷ number # this is a word
▷ \s # this is a space
▷ (?<number>\d+) # this is a bunch of numbers
▷ /x =~ 'hello here is a number 11111'
#⇒ 16
▶ number
#⇒ "11111"
这里它非常适用于扩展的正则表达式,因为它是内联的。
UPD 感谢@Stefan,documentation提出了更精确的要求:
此分配在Ruby解析器中实现。解析器检测到
regexp-literal =~ expression
的分配。正则表达式必须是没有插值的文字,并放在左侧。