2013-02-26 28 views
-1

我在Ruby中尝试了几个匹配选项,并且被结果搞糊涂了,因为matchscan返回不同的结果。这是一个例子:为什么匹配和扫描返回同一个正则表达式的不同结果?

s ="C:\Users\rdo\AppData\Local\Temp/ccqZSpeQ.o: In function `main':\r\nmain.c:(.text+0x8): undefined reference to `some_function'" 

%r[([\w\.\/]+):(.+)].match(s) 
# => #<MatchData "C:Users\rdoAppDataLocalTemp/ccqZSpeQ.o: In function `main':\r" 1:"C" 2:"Users\rdoAppDataLocalTemp/ccqZSpeQ.o: In function `main':\r"> 

s.scan(/([\w\.\/]+):(.+)/) 
# => [["C", "Users\rdoAppDataLocalTemp/ccqZSpeQ.o: In function `main':\r"], ["main.c", "(.text+0x8): undefined reference to `some_function'"]] 

我预计match将返回结果一样scan但事实并非如此。谁能解释为什么?

+3

这里有什么困惑?他们是不同的方法,做不同的事情并返回不同的东西。这些文档都很清楚每件事情。 – 2013-02-26 02:21:08

+0

其实我不明白为什么'match'只匹配一个部分或表达式? – rdo 2013-02-26 04:01:15

回答

0

matchscan是完全不同的方法,它们做了完全不同的事情并返回完全不同的结果。

match向您介绍将正则表达式应用于字符串,匹配的内容,开始和长度以及匹配模式的哪一部分的结果。

scan将正则表达式应用于字符串并返回所有捕获结果的字符串数组。

+0

在'php中匹配'preg_match'的模拟吗? – rdo 2013-02-26 04:45:50

相关问题