有人可以看看以下功能,并为我解释正则表达式,因为我不理解它,我不喜欢使用我不理解的东西,因为我赢了'能够复制它以供将来使用,我也不会从中学习。
也可以有人解释双!!在前面,我知道单一意味着不是双重意味着不是"不是"?
该函数是String
的补丁,用于检查它是否能够转换为整数。
class String
def is_i?
!!(self =~ /\A[-+]?[0-9]+\z/)
end
end
给我带来麻烦的主要因素是[-+]
,因为这对我来说没什么意义,如果你能在上下文中解释一下它会非常有帮助。
编辑: 由于人们错过了问题的第二部分,我会更加明确。
!!
在支票前面的含义是什么,我知道单!
表示不是,但我无法找到!!
的含义。
答案 0 :(得分:1)
[-+]
字符类 [-+]
是一个字符类。它表示“匹配一个字符指定的字符”,即-
或+
。
字符类中的连字符
我可以看到这个特定的类如何混淆,因为连字符经常在字符类中起特殊作用:它链接两个字符以形成字符范围。例如,[a-z]
表示“匹配a
和z
之间的一个字符,[a-z0-9]
表示”匹配a
和z
之间的一个字符或在0
和9
之间。
但是,在这种情况下,[-+]
中的hypen位于无法用于指定范围的位置,而-
只是一个字面连字符。
解码整个表达
\A
[-+]?
?
[0-9]+
之间范围内的单个字符
+
\z
答案 1 :(得分:1)
Character Class定义了一组字符,其中任何一个字符都可以出现在字符串中,以便匹配成功。
例如,正则表达式[-+]?[0-9]+
将匹配123
,-123
或+123
,因为它定义了一个字符类(接受-
,{ {1}},或者两者都不是第一个字符。
在上下文中:
+
在字符串的开头断言位置。 \A
任何字符:[-+]
或-
(+
可选,意思是零和<强>一个时间)?
任何字符:[0-9]
到0
(9
quantifier表示 1 或更多次)+
断言字符串最后的位置。\z
是什么意思? !!
将值转换为布尔值。
答案 2 :(得分:0)
为我解释正则表达式,因为我不明白
模式说明:\A[-+]?[0-9]+\z
\A Start of string
[-+]? plus or minus sign [zero or one time (optional)]
[0-9]+ 0 to 9 any digit [one or more times]
\z End of string
上述正则表达式模式能够匹配+
或-
符号可选的任何正整数和负整数。
详细了解Character Classes并在Rubular
在线测试您的正则表达式模式