正規表現についての役立ちそうな情報を忘れないようにメモしておきます。
全角文字へのマッチ
[^\x01-\x7F]
再帰的なマッチ
これを使うと、きちんと入れ子になったカッコにだけマッチさせる、といったことができます。
Ruby の場合
:Ruby:
/^((?:[^()]++|\(\g<1>\))*)$/ =~ 'a(1(2)1)b' # => 0 (一つ目のキャプチャ付き括弧を指定)
/^((?:[^()]++|\(\g<-1>\))*)$/ =~ 'a(1(2)1)b' # => 0 (相対的に指定)
/^(?<ABC>(?:[^()]++|\(\g<ABC>\))*)$/ =~ 'a(1(2)1)b' # => 0 (名前で指定)
/^((?:[^()]++|\(\g<1>\))*)$/ =~ 'a(12)1)b' # => nil