ruby匹配和scan不以相同的方式匹配模式?

ruby匹配和scan不以相同的方式匹配模式?,ruby,regex,Ruby,Regex,我正试图从多个记录中解析出一些信息。我感兴趣的项目之一可以在一个字符串中包含多个条目。我的想法只是返回一个包含所有匹配值的数组,但结果却有问题。例如: > s = '>ctg7180000000043_1204 selected_feature: CDS loc=299156..299605;/db_xref="GO:0007155";/db_xref="GO:0009289";' => ">ctg7180000000043_1204 selected_feature:

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

> 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="[^"]+')
 => []
>s='>CTG71800000043\u 1204所选功能:CDS loc=299156..299605/db_xref=“GO:0007155”/db_xref=“GO:0009289”
=>>CTG71800000043\U 1204所选功能:CDS loc=299156..299605;/db\U外部参照=\“GO:0007155\”;/db\U外部参照=\“GO:0009289\”
>s.match('db_xref=“[^”]+')
=>#
String#match
将其参数转换为Regexp,
String#scan
搜索文本字符串(如果您给它的是文本字符串),给#scan一个Regexp会给它相同的匹配。参考ri文档进行字符串匹配和字符串扫描。在irb中尝试以下操作:

regex = /db_xref="[^"]+/
s.match(regex)
=> #<MatchData "db_xref=\"GO:0007155">
s.scan(regex)
=> ["db_xref=\"GO:0007155", "db_xref=\"GO:0009289"]
regex=/db\u xref=“[^”]+/
s、 匹配(正则表达式)

=>#啊,match将字符串转换为正则表达式,而scan不会。因此,如果要将正则表达式解释为正则表达式,就必须使用//作为scan中的delimeters。明白了,谢谢!