2011-04-01 312 views
2

我已經偶然發現了這個Ruby代碼。我知道\ d {4})\ /(\ d \ d)\ /(\ d \ d)\ /(。*)/意思,但是\ 1- \ 2- \ 3- \ 4是什麼意思?什麼是gsub(/( d {4}) /( d d) /( d d) /(。*)/,' 1- 2- 3- ) 意思?

+2

有人是一個大的反斜槓風扇。 '%r [(\ d {4})/(\ d \ d)/(\ d \ d)/(。*)]'而不是'/(\ d {4})\ /(\ d \ d)\ /(\ d \ d)\ /(。*)/'? – 2011-04-01 15:55:12

+1

@Jörg:作者可能不知道'%r'正則表達式文字。 – 2011-04-01 15:57:38

+0

我是ruby的新手,所以我不知道你們在談論什麼,但它似乎%r [(\ d {4})/(\ d \ d)/(\ d \ d)/(。*)]對我來說也更清潔。 – studiomohawk 2011-04-04 10:36:13

回答

3

\1-\2-\3-\4back references到正則表達式內所捕獲的數據本身。

因此,\1包含在第一組中捕獲的數據,\2是在第二組中捕獲的數據,\3是在第三組中捕獲的數據,依此類推。

看到這裏的Ruby implementation

0

我認爲\ 1,\ 2等只是引薦到匹配組

即\ 1 ==(\ d {4})

3

這些都是反向引用。 \ 1表示第一組括號()的結果,即(\d\d),\ 2表示第二組等。

1

變換1234/12/12/XX1234-12-12-XX

+0

嗯,這是什麼? – 2011-04-01 15:51:55

+1

什麼'gsub(/(\ d {4})\ /(\ d \ d)\ /(\ d \ d)\ /(。*)/,'\ 1- \ 2- \ 3- \ )'實際上是。 '1234/12/12/XX'只是一個樣本輸入 – knoopx 2011-04-01 15:54:32

+0

啊,好的。你原來的回答並沒有太多意義。 – 2011-04-01 15:56:47

-1

您可以捕獲正則表達式的模式的部分放置它們在括號內,然後在替換部分按照它們出現的順序用\ 1,\ 2,\ 3,...引用它們。

在你的例子中,1將是前4位數字,2將是後2位數字,3將是以下2位數字,其餘4位數字。

所以「20100410milk」將被「2010-04-10牛奶」取代,因爲\ 1將會是2010,\ 04 \,\ 3 10和\ 4牛奶。

+0

您錯過了輸入中的文字斜槓。 – Phrogz 2011-04-01 17:35:38

相關問題