请在此函数中解释正则表达式

时间:2014-07-22 00:02:47

标签: ruby regex

有人可以看看以下功能,并为我解释正则表达式,因为我不理解它,我不喜欢使用我不理解的东西,因为我赢了'能够复制它以供将来使用,我也不会从中学习。

也可以有人解释双!!在前面,我知道单一意味着不是双重意味着不是"不是"?

该函数是String的补丁,用于检查它是否能够转换为整数。

class String 
    def is_i?
        !!(self =~ /\A[-+]?[0-9]+\z/) 
    end
end

给我带来麻烦的主要因素是[-+],因为这对我来说没什么意义,如果你能在上下文中解释一下它会非常有帮助。

编辑: 由于人们错过了问题的第二部分,我会更加明确。

!!在支票前面的含义是什么,我知道单!表示不是,但我无法找到!!的含义。

3 个答案:

答案 0 :(得分:1)

[-+]字符类

[-+]是一个字符类。它表示“匹配一个字符指定的字符”,即-+

字符类中的连字符

我可以看到这个特定的类如何混淆,因为连字符经常在字符类中起特殊作用:它链接两个字符以形成字符范围。例如,[a-z]表示“匹配az之间的一个字符,[a-z0-9]表示”匹配az之间的一个字符或在09之间。

但是,在这种情况下,[-+]中的hypen位于无法用于指定范围的位置,而-只是一个字面连字符。

解码整个表达

  • 在字符串\A
  • 的开头处断言位置
  • 匹配列表中的单个字符“ - +”[-+]?
    • 在零到一次之间,尽可能多次,根据需要回馈(贪婪)?
  • 匹配“0”和“9”[0-9]+之间范围内的单个字符
    • 在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)+
  • 断言字符串\z
  • 最后的位置

答案 1 :(得分:1)

Character Class定义了一组字符,其中任何一个字符都可以出现在字符串中,以便匹配成功。

例如,正则表达式[-+]?[0-9]+将匹配123-123+123,因为它定义了一个字符类(接受-,{ {1}},或者两者都不是第一个字符。

在上下文中:

  • +在字符串的开头断言位置。
  • \A任何字符:[-+]-+ 可选,意思是和<强>一个时间)
  • ?任何字符:[0-9]09 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

在线测试您的正则表达式模式