红宝石匹配和扫描不匹配模式相同的方式?

时间:2013-02-27 19:02:17

标签: ruby regex

我正试图从多个记录中解析出一些信息。我感兴趣的项目之一可以在字符串中有多个条目。我的想法只是返回所有匹配值的数组,但我遇到了结果的问题。例如:

> s = '>ctg7180000000043_1204 selected_feature: CDS loc=299156..299605;/db_xref="GO:0007155";/db_xref="GO:0009289";'
 => ">ctg7180000000043_1204 selected_feature: CDS loc=299156..299605;/db_xref=\"GO:0007155\";/db_xref=\"GO:0009289\";"
> s.match('db_xref="[^"]+')
 => #<MatchData "db_xref=\"GO:0007155">
> s.scan('db_xref="[^"]+')
 => []

无论如何,匹配,呃,匹配和扫描为什么没有?

1 个答案:

答案 0 :(得分:2)

String#match将其参数转换为Regexp,String#scan搜索文字字符串,如果这是你给它的,给#scan一个Regexp给它相同的匹配。引用String#match和String#scan的ri文档。在irb中尝试以下内容:

regex = /db_xref="[^"]+/
s.match(regex)
=> #<MatchData "db_xref=\"GO:0007155">
s.scan(regex)
=> ["db_xref=\"GO:0007155", "db_xref=\"GO:0009289"]

扫描也将继续匹配整个字符串,而匹配在第一个模式停止(如果需要,您可以给它一个开始偏移量以继续)。

相关问题