hakeの日記

Windows環境でプログラミングの勉強をしています。

後方参照のレベル - Ruby1.9の正規表現

「正規表現」に無限のパワーを与える"田中哲スペシャル" - Atzy->getLog() を拝見して、田中哲スペシャルというのを知りました。


対応する括弧やタグのマッチが簡単にできます。いやぁ、正規表現って奥が深いっす。

# coding: windows-31j

s = '<a><b>text1</b>text2</a>'
re = /(?<xml><(?<elem>\w+)>\g<xml><\/\k<elem+0>>\g<xml>|\w*)/
p re =~ s #=> 0
p $&       #=> <a><b>text1</b>text2</a>


で、後方参照にレベルを指定できるって書いてあったので上の例を修正して試して見ました。既にサンプル文字列がXMLの体を為していないですが……

# coding: windows-31j

s  = '<a><b><>text1</>text2</b>'
re = /(?<xml><(?<elem>\w*)>\g<xml>(<\/\k<elem+1>>|)g<xml>|\w*)/

p re =~ s #=> 0
p $&       #=> <a><b><>text1</>text2</b>

レベルを+1すると内側(ひとつ下?)の\kのマッチ結果を持ってくるようです。


でも、この機能ってどんな場面で実用になるのだろう?