2011-04-01 167 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

相关问题