Fatal Error: Unexpected BLOG

主に自分用の備忘録として

【PHP】preg系関数で全角文字がマッチしなかったら・・・

正規表現は奥が深そう過ぎて常に腰が引けてます。

今回ハマったのは、全角記号のマッチング。一般的な全角文字っていうことならググると色々出てきますが、もっと限定的なもので良かったので、意外とあっさり解決出来ました。

以下のサイトを参考にさせて頂きました。ほんと正規表現使いこなしてる人尊敬します。

マッチさせたい文字列

今回マッチさせたい文字列は以下のようなものでした。

(【|<)(全角半角・英数記号などあらゆる文字を含む可能性のある任意の日本語文字列。)(】|>)

ちなみにPHPファイルもマッチさせたい文字列自体もUTFで書かれています。

ダメ表現

当初は以下のようなパターンでマッチさせようとしていました。

/(【|<)[^【】<>]*(】|>)/

ところが、マッチするものもあれば、マッチしないものもあるといった具合。なぜだ。

で、マッチしなかったものに関して、以下のパターンでマッチングをかけました。

/(\x{3010}|\x{ff1c})[^\x{3010}\x{3011}\x{ff1c}\x{ff1e}]*(\x{3011}|\x{ff1e})/u

全角括弧の部分をUnicodeでの指定に変えただけですが、マッチしなかったものもこれでマッチしました。

UTFで書かれている全角文字に関してはUnicodeで指定してあげないといけないということ?なのかな?