为什么匹配和扫描会为同一个正则表达式返回不同的结果?

时间:2013-02-26 02:02:27

标签: ruby regex

我在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之类的结果,但事实并非如此。任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:0)

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

match告诉您将正则表达式应用于字符串,匹配的内容,它们的开始和长度以及模式的哪个部分匹配的结果。

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