このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

CakePHP 1.2 の正規表現問題

現在、「逆引き CakePHP リファレンス」の大幅なバージョンアップへ向けて CakePHP 1.2 の調査を進めておりますが、正規表現を使っているところで “PCRE does not support \L, \l, \N, \U, or \u” の警告が多発しており、調査が難航しております(処理が完遂できていない時点で警告ではなくエラーにしてもいい気がしますが)。

つまり「 PCRE では \u などのエスケープシーケンスに対応していない」という警告なのですが、なぜ対応されていないのかというと「 \u などのエスケープシーケンスは正規表現エンジンではなく Perl の文字列処理の中で実装されているため」だそうです。

では、なぜ \u が必要なのか?

利用している箇所を調べてみると、どうやら通貨記号とマッチさせたいところで \u を使っているようです。たとえば \u00a2 とありました。と、ここで Perl に詳しい方はピンとくるかもしれません、そうです \u は続く文字を大文字にするというエスケープシーケンスなのですが、状況を見る限り \x00a2 とマッチさせたいかのような書き方になっています。それなら納得がいきます。 \xa2 でセントの記号(¢)になるからです。

ここからは推測に過ぎないのですが、もしかしたらこのコードは Python などの他言語からの移植なのかもしれません。他言語では \u は 16 進コードによるマッチングの記号になります。本来は \xa2 が正解なのかもしれません。

まだステータスがベータ版なので細部には調整すべき点が残っているということでしょうか? CakePHP 1.2 を検討されている方は注意してください。

back to top