0

例如,考虑以下表达式:

no_space = "This is a test".match(/(\w+)(\w+)/) 
with_space = "This is a test".match(/(\w+) (\w+)/) 

表达式no_space现在是 matchdata 对象#<MatchData "This" 1:"Thi" 2:"s">with_space而是#<MatchData "This is" 1:"This" 2:"is">。这里发生了什么?在我看来,标记之间的文字空间向 ruby​​ 表明它应该尽可能匹配多个单词,而没有空格会导致匹配仅限于一个单词。任何关于该主题的解释或澄清将不胜感激。

谢谢。

4

2 回答 2

1

\w不匹配空格,并且+是贪婪的,除非你跟着它?,所以 Ruby 尝试尽可能多地匹配\w,只要其余的 express 也匹配,Thi在第一次捕获和s第二次捕获中有效消耗。

当你添加一个空格时,Ruby 匹配尽可能多\w的直到一个空格字符,然后匹配尽可能多的\w,因此匹配Thisand is

如果不清楚,请告诉我。

于 2013-05-18T17:27:24.670 回答
0

使用正则表达式/(\w+)(\w+)/,唯一可以匹配的字符是单词字符(字母、数字和下划线)。正则表达式只会匹配字符串中的连续字符,因此除非您在正则表达式中包含某些内容以匹配单词之间的空格,否则正则表达式只能匹配一个单词。

于 2013-05-18T17:25:54.233 回答