2011-05-12 113 views
31

一次又一次我看到代码中使用了$ 1和$ 2。这是什么意思?你能举个例子吗?

+1

这可能对您有所帮助:[分组和反向引用](http://www.regular-expressions.info/brackets.html) – 2011-05-12 18:47:17

回答

30

创建正则表达式时,您可以选择捕获部分匹配并将它们保存为占位符。它们的编号从$1开始。

例如:

/A(\d+)B(\d+)C/ 

这将捕获从A90B3C903。如果需要分组但不想捕获它们,请使用(?:...)版本,而不是(...)

数字从括号开始的顺序从左到右。这意味着:

/A((\d+)B)(\d+)C/ 

针对相同的字符串匹配将捕获90B903

+0

谢谢。如果时间允许,我会接受这个答案。 – david 2011-05-12 18:50:52

+0

所以应该这样工作:A(\ d +)B($ 1)C – 0x499602D2 2011-06-05 13:03:23

+0

它在Perl中,但我不认为Ruby支持这种回溯。 – tadman 2011-06-06 14:30:58

5

这是特别的。用于Replacement String Syntax(即格式字符串)适用于查找案例/案例折叠&替代。要引用捕获,请使用$ n,其中n是捕获寄存器编号。使用$ 0意味着整个比赛。示例:Find: (<a.*?>)(.*?)(</a>) Replace: $1\u$2\e$3

相关问题