6
的紅寶石(1.9.3)文檔似乎暗示掃描相當於=〜除了紅寶石正則表達式與掃描=〜
- 掃描返回多個匹配,而=〜只返回的第一次出現,並
- 掃描返回匹配數據,而=〜返回索引。
但是,在下面的示例中,這兩個方法似乎對同一個字符串和表達式返回不同的結果。這是爲什麼?
1.9.3p0 :002 > str = "Perl and Python - the two languages"
=> "Perl and Python - the two languages"
1.9.3p0 :008 > exp = /P(erl|ython)/
=> /P(erl|ython)/
1.9.3p0 :009 > str =~ exp
=> 0
1.9.3p0 :010 > str.scan exp
=> [["erl"], ["ython"]]
如果第一場比賽的指數是0,不應掃描回報「的Perl」和而不是「ERL」和「蟒蛇」「巨蟒」?
由於
謝謝,所以掃描是嚴格不等於=〜,當有涉及組? – Anand 2012-04-24 03:46:38
@Anand由於掃描返回的東西完全不同於〜,我不認爲它們是相等的。掃描返回的第一個結果是一個從索引'str =〜exp'開始的子字符串,當且僅當'exp'不包含捕獲組時。除此之外,你還可以說第一個結果將等於'Regexp.last_match.string'在執行'str =〜exp'後獲得,如果它不包含捕獲組,則返回'Regexp.last_match.captures'確實包含捕獲組。 – sepp2k 2012-04-24 03:58:56
很高興看到您可以從中學習的這類文章。 – texasbruce 2012-04-24 04:15:23