2010-02-04 39 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]+)" 
相關問題