我在Ruby中尝试了几种匹配选项,并且因为match
和scan
返回不同的结果而被结果搞糊涂了。这是一个例子:
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
之类的结果,但事实并非如此。任何人都可以解释原因吗?
答案 0 :(得分:0)
match
和scan
是完全不同的方法,它们完全不同,并返回完全不同的结果。
match
告诉您将正则表达式应用于字符串,匹配的内容,它们的开始和长度以及模式的哪个部分匹配的结果。
scan
将正则表达式应用于字符串,并返回所有捕获结果的字符串数组。