Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 请解释此函数中的正则表达式_Ruby_Regex - Fatal编程技术网

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

Ruby 请解释此函数中的正则表达式,ruby,regex,Ruby,Regex,请有人看一下下面的函数,并为我解释一下正则表达式,因为我不理解它,我不喜欢使用我不理解的东西,因为这样我就无法复制它以供将来使用,也无法从中学习 也可以有人解释一下双!!在前面,我知道单意味着不是,所以双是不是意味着不是 该函数是String的补丁,用于检查它是否能够转换为整数 class String def is_i? !!(self =~ /\A[-+]?[0-9]+\z/) end end 给我带来麻烦的主要事情是[-+],因为这对我来说没有什么意义

请有人看一下下面的函数,并为我解释一下正则表达式,因为我不理解它,我不喜欢使用我不理解的东西,因为这样我就无法复制它以供将来使用,也无法从中学习

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

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

class String 
    def is_i?
        !!(self =~ /\A[-+]?[0-9]+\z/) 
    end
end
给我带来麻烦的主要事情是
[-+]
,因为这对我来说没有什么意义,如果你能在给定的上下文中解释一下,那将非常有帮助

编辑: 由于人们错过了问题的第二部分,我将更明确一点

什么是
意思是在支票前面,我只知道一个
的意思不是,但我找不到
的内容意味着

给我解释一下正则表达式,因为我不懂

模式说明:
\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
上面的正则表达式模式能够匹配具有
+
-
符号可选的任何正整数和负整数

[-+]
字符类上在线阅读并测试您的正则表达式模式
[-+]
是一个字符类。它表示“匹配类指定的一个字符”,即
-
+

字符类中的连字符

我可以看出这个特殊的类是如何令人困惑的,因为连字符通常在字符类中起着特殊的作用:它链接两个字符以形成一个字符范围。例如,
[a-z]
表示“在
a
z
之间匹配一个字符,
[a-z0-9]
表示“在
a
z
之间或
0
9
之间匹配一个字符”

但是,在这种情况下,
[-+]
中的hypen位于一个不能用于指定范围的位置,
-
只是一个文字连字符

解码整个表达式

  • 在字符串开头断言位置
    \A
  • 匹配列表中的单个字符“-+”
    [-+]?
    • 在0到1次之间,尽可能多次,根据需要回馈(贪婪)
  • 在“0”和“9”之间匹配单个字符
    [0-9]+
    • 在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)
      +
  • 在字符串的最末端断言位置
    \z
定义一组字符,其中任何一个字符都可以出现在字符串中,以便匹配成功

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

在这方面:

  • \A
    断言字符串开头的位置
  • [-+]
    的任何字符:
    -
    +
    可选,表示在时间之间)
  • [0-9]
    的任何字符:
    0
    9
    +
    表示1或更多次)
  • \z
    断言字符串最末端的位置
什么是
平均值?

放在一起将值转换为布尔值。

问题“此代码如何工作”只比“此代码为什么不工作”稍微好一点。虽然问题是关于编程的,但它不太可能帮助其他用户。如果您想知道
的意思是,问一个问题“Ruby中的!!是什么意思”。我只是想解释一下代码,因为我不确定它的意思,我试着解决它,但是第一个字符类
[-+]
和double
!!
通过我,如果我不理解代码,我就不喜欢使用它。这就是它的全部,就我而言,它与问为什么它不工作完全不同,因为这是在问一个问题的解决方案;我要求解释它是如何工作的,这样我才能更好地理解和学习我也这么做了,我在谷歌上搜索了一下,但没有得到任何帮助,我得到的只是“X”个关于为什么你应该用ruby编程的理由“这或是一些不相关的结果。这就是为什么我要把这个问题作为我主要问题的额外部分;搜索带有标点符号的术语可能会令人沮丧。我觉得很有帮助。谢谢你的绿色复选标记,很高兴它有帮助!:)是的,我拿起了它,这就是为什么我把重点放在
[-+]
:)