Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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
Regex 正则表达式问题:/../和/(…)/之间有什么区别?_Regex_Ruby - Fatal编程技术网

Regex 正则表达式问题:/../和/(…)/之间有什么区别?

Regex 正则表达式问题:/../和/(…)/之间有什么区别?,regex,ruby,Regex,Ruby,看看下面Ruby中的代码,为什么第一个实例在从字符串形成数组时拒绝空格,而第二个实例保留空格?基本上,我是在问/../和/../在正则表达式中有什么区别 str = 'The quick brown fox jumps over the lazy dog.' print str.split(/\s+/) #["The", "quick", "brown", "fox", "jumps", &qu

看看下面Ruby中的代码,为什么第一个实例在从字符串形成数组时拒绝空格,而第二个实例保留空格?基本上,我是在问/../和/../在正则表达式中有什么区别

str = 'The quick brown fox jumps over the lazy dog.'

print str.split(/\s+/)
#["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."]

print str.split(/(\s+)/)
#["The", " ", "quick", " ", "brown", " ", "fox", " ", "jumps", " ", "over", " ", "the", " ", "lazy", " ", "dog."]

我想你想解释一下:

在空白处打印str.split/\s+/split并使用它 在空白处打印str.split/\s+/split并捕获它
在第一种情况下,我们根据空格进行拆分,这些空格字符被使用,这意味着它们不会出现在输出数组中。这只留下非空白单词。另一方面,在第二个版本中,我们使用\s+将分割的空白作为捕获组。因此,这些捕获的空白字符会进入输出。因此,我们在输出数组中将所有非空白组和空白组视为单独的按顺序条目。

我想您想解释一下:

在空白处打印str.split/\s+/split并使用它 在空白处打印str.split/\s+/split并捕获它
在第一种情况下,我们根据空格进行拆分,这些空格字符被使用,这意味着它们不会出现在输出数组中。这只留下非空白单词。另一方面,在第二个版本中,我们使用\s+将分割的空白作为捕获组。因此,这些捕获的空白字符会进入输出。因此,我们在输出数组中将所有非空白组和空白组视为单独的顺序项。

通常,正则表达式部分周围的括号捕获与正则表达式该部分匹配的文本部分,以便稍后在正则表达式或匹配后的代码中使用

示例:foooo.match/*\1/为true,因为它包含重复的字符串;\1表示在其第一组括号之间匹配此模式部分的内容。在本例中,括号中的.*匹配foo,而\1匹配foo的第二个副本

但分裂是不同的;它匹配了很多次,并且没有任何地方可以放置括号组捕获的文本。因此,括号告诉它在结果数组中保留分隔符。这样,如果要拆分的正则表达式可以匹配多个字符,则可以找出每个位置都有哪个字符

 # no capture, nothing kept; nothing in the array to tell - from ,
 '1-2,3'.split(/[-,]/) #=> ["1", "2", "3"]

 # with capture, include delimiters; now array tells me which separators used
'1-2,3'.split(/([-,])/) #["1", "-", "2", ",", "3"]

这是从Perl继承的行为的另一个示例,FWIW。

通常,正则表达式部分周围的括号捕获与该部分正则表达式匹配的文本部分,以便稍后在正则表达式或匹配后的代码中使用

示例:foooo.match/*\1/为true,因为它包含重复的字符串;\1表示在其第一组括号之间匹配此模式部分的内容。在本例中,括号中的.*匹配foo,而\1匹配foo的第二个副本

但分裂是不同的;它匹配了很多次,并且没有任何地方可以放置括号组捕获的文本。因此,括号告诉它在结果数组中保留分隔符。这样,如果要拆分的正则表达式可以匹配多个字符,则可以找出每个位置都有哪个字符

 # no capture, nothing kept; nothing in the array to tell - from ,
 '1-2,3'.split(/[-,]/) #=> ["1", "2", "3"]

 # with capture, include delimiters; now array tells me which separators used
'1-2,3'.split(/([-,])/) #["1", "-", "2", ",", "3"]

这是从Perl FWIW继承的行为的另一个示例。

您的两个剥离调用是相同的。您在这两种情况下粘贴了完全相同的print命令。请给我们看真实的代码。您的两个拆分调用是相同的。您在这两种情况下粘贴了完全相同的打印命令。请告诉我们真正的代码。