任何人都可以向我解释以下 Ruby 代码的作用是什么?
VARIABLE.scan /\((.+)\)$/
P.S。
如果VARIABLE=4
,我得到[]
如果VARIABLE='aa'
,我得到[]
代码是做什么的?
答案 0 :(得分:3)
/\((.+)\)$/
$
是行尾锚点。最外面的()
对被转义,因此它们将匹配字符串中的文字括号。 .+
匹配一个或多个字符。
因此,正则表达式匹配以括号组结尾的字符串,其中至少包含一个字符,如:
qdqsqsddq(1)
sqkldj(azeazeza)
并捕获该组中的文字。
(请注意,它也匹配qsd(qsdq(qsdq)
,并且在这种情况下“返回”qsdq(qsdq
,因此它的用处有点可疑。)
答案 1 :(得分:2)
/ # Regex delimiter
\( # Match "("
(.+) # Match and capture one or more (+) characters (.), except newlines
\) # Match ")"
$ # Match the end of the line (before any newlines, if present)
/ # Regex delimiter
.scan()
搜索字符串并将所有匹配结果添加到数组中。
因此,实际上,它为您提供了多行字符串中所有行的数组,从行中的第一个左括号开始,直到行尾的右括号。
答案 2 :(得分:1)
要添加到其他帖子还有一件事:
If VARIABLE=4, I got []
这实际上引发了异常。你需要VARIABLE =“4”(注意:字符串.Fixnum没有这样的方法)。
我还举了一些例子:
"(4)".scan /\((.+)\)$/ # -> [["4"]]
"(42342)".scan /\((.+)\)$/ # -> [["42342"]]
"abracadabra (42342)".scan /\((.+)\)$/ # -> [["42342"]]
"abracadabra (42342) (23)".scan /\((.+)\)$/ # -> [["42342) (23"]].
# The regex do not match new lines by default.
"(4)\n(5)\n".scan /\((.+)\)$/ # -> [["4"], ["5"]].
"(4)\n(5)\n".scan /\((.+)\)$/m # -> [["4)\n(5"]]