タイトル | : Re: 正規表現で読み込み違反のエラー |
投稿日 | : 2007/01/26(Fri) 20:31 |
投稿者 | : 永 |
> エラーメッセージ
> 「モジュール 'ntdll.dll' のアドレス 7C95142E でアドレス 656C7552 に対する読み込み違反がおきました。」
私の環境でもエラーが発生することを確認しました。
ちょっと横道に外れますが。
この正規表現をちゃんと処理できない正規表現エンジンは結構あるかもしれません。
問題点1:キャレット(^)を行頭の意味で2箇所使っている。
キャレットが正規表現の先頭にあれば行頭の意味に解釈してもらえるのは確実ですが、「|」でつないだ直後だとそのように解釈しないエンジンがありえそうです。
問題点2:グループの番号が重複する可能性がある
今回の正規表現の場合、「|」でつないだ前後でグループの番号が重複します。これがエラーを引き起こす原因になりかねません。
今回の場合、同じ意味の
「^((?:UNION ALL\n\n)?[^\n]+)\n {4}([^\n]+)\n([^\n]+)\n {4}([^\n]+\n)」
のように記述すると置換できます。
ちなみに、多分転写ミスだと思いますが、置換文字列は
「\1 \2 \3 \4」
ではなく、
「$1 $2 $3 $4」
が正しいと思います。