入れ子のマッチ

正規表現の中に自己を含めて循環定義できるRubyPerlなどの処理系なら、入れ子もなんとか処理できるみたいです。
括弧のパターンにマッチすると、その都度中身の正規表現がlazyに変わっていくというトリッキーな技です。

http://leoclock.blogspot.com/2009/01/blog-post_27.html

これはperlの言語側の変数を参照して再帰しているので、正規表現の中だけで再帰させることを考える。
実際には?>や?:を使ってチューニングするが、ここでは見ためをシンプルにするために省略(ということにしておく)

PHP(PCRE)の場合

$str = "(a (b, c)), (d), (e, f)";
preg_match_all('/\(([^()]|(?R))*\)/',$str,$r);
echo join("\n",$r[0]);

実行結果

(a (b, c))
(d)
(e, f)

Ruby1.9(鬼車)の場合

str = "(a (b, c)), (d), (e, f)"
puts str.scan(/(?<R>\(([^()]|\g<R>)*\))/).join("\n")

実行結果は同じなので省略
鬼車では名前をつけずに全体式を参照する(?R)のような記法は無いのかな?

http://d.hatena.ne.jp/atzy/20080910
http://www.kt.rim.or.jp/~kbk/regex/regex.html
http://jp2.php.net/manual/ja/regexp.reference.php
参考にさせていただきました。