2013-02-27 101 views
0

我試圖從多個記錄中解析出一些信息。我感興趣的項目之一可以在一個字符串中有多個條目。我的想法只是返回所有匹配值的數組,但是我遇到了結果問題。例如:紅寶石匹配和掃描不匹配的模式相同的方式?

> 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="[^"]+') 
=> [] 

無論如何,爲什麼匹配,呃,匹配和掃描不?

回答

2

String#match將其參數轉換爲正則表達式,String#scan搜索文字字符串,如果這就是您給它的值,給#scan一個正則表達式給它相同的匹配。參考ri文檔進行String#匹配和String#掃描。嘗試在IRB如下:

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

掃描也將繼續匹配整個字符串,而匹配停在第一圖案(然後你可以給它一個開始偏移繼續,如果你需要)。

+0

啊,匹配將字符串轉換爲正則表達式,掃描不會。所以你必須使用//作爲掃描中的定界符,如果你想它將正則表達式解釋爲正則表達式。知道了謝謝! – jearl 2013-02-27 20:07:17