2010-02-04 61 views
2

我在很多正则表达式引擎中发现了一些有趣的可能性:正则表达式:递归反向引用 - 用于什么?

可以在捕获组内引入反向引用并引用该组。

例如:(\1)

我的问题:什么正则表达式模式可以使用?我无法想象...

+5

如果你需要找出第二次出现的指数? – SilentGhost 2010-02-04 12:40:50

+0

SilentGhost,你应该已经发布了这个答案。 – 2010-02-04 12:48:05

+0

@SilentGhost:我相信应该是一个答案。 – sepp2k 2010-02-04 12:48:14

回答

3

有一个explanation for use of nested references,我认为这清楚地表明了此功能的边际效用。

+0

示例正则表达式,请 – ControlFlow 2010-02-04 13:04:11

+0

如果你轻松地阅读我的问题,你会明白,我并不是在问如何正常使用反向引用,请看看我提供的示例正则表达式中有哪些反向引用。 – ControlFlow 2010-02-04 14:02:23

+0

@ControlFlow:I don没有看到你发布任何*正则表达式,我无法想象'(\ 1)'可能匹配什么,或者对于甚至编译有用。实际的例子 – SilentGhost 2010-02-04 14:14:35

0

这个怎么样(忽略空格):

{ .* ({ .* \1 .* }) .* }

匹配方法的身体在C#/的Java/...

+0

它不起作用,反向引用与捕获组1匹配的文本匹配,而不是组1中的模式本身。 – ControlFlow 2010-02-24 20:07:53

+0

@ControlFlow:这只需要是'(?1)'而不是'\ 1',它确实会在像样的正则表达式引擎上递归。 – tchrist 2011-02-27 16:25:23

1

我还有很长的YAML架构,我需要/想从:

columns: 
    id: 
     type: string(36) 
     fixed: true 
     unsigned: false 
     primary: true 
     autoincrement: false 
    descripcion: 
     type: string(45) 
     fixed: false 
     unsigned: false 
     primary: false 
     notnull: true 
     autoincrement: false 

要这样:

columns: 
    id: {type: string(36), fixed: true, unsigned: false, primary: true, autoincrement: false} 
    descripcion: {...}... 

在这种情况下,我需要backrefences中的递归级别,因为列名在列描述之间。 这是适合每一行,但我不能把“{}”以防万一$ 1,我想最终每个描述域之间的括号:

"\n^  ([^\n]+)"