PHP Warning: preg_replace(): Compilation failed: range out of order in character class at offset 18

preg_replaceを使ってたらこんなエラーが出た。Warningレベルだから止まらなくて済んだけど、ちゃんと動いてないのは事実。

PHP Warning:  preg_replace(): Compilation failed: range out of order in character class at offset 18 in ..... on line 14

まずは男と言われているのか、日本語でおkしてみよう。

コンパイルに失敗しました:オフセット18の文字クラスの範囲が乱れています

広告

コンパイルエラーだ。正規表現の範囲指定の部分に問題があるらしい。ちなみに問題のある箇所はこんな感じ。

if(preg_match('/#From:([a-z0-9@_-\.]+)/',$MailBody,$match)){

メールアドレス記述の部分を抜き出したかったのだけど、「-」の部分が文字クラスの範囲指定として判断されてしまっている。

if(preg_match('/#From:([a-z0-9@_\-\.]+)/',$MailBody,$match)){

こうして-をちゃんとエスケープしてあげるとエラーは消えた。

あと、「.」は[]の外に出して

if(preg_match('/#From:([a-z0-9@_\-].+)/',$MailBody,$match)){

としても、狙った効果(メールアドレスの抜き出し)は得られた。
多分メールアドレスを表現する正規表現は、ググれば巷にもっといい記述があるだろうけど、エラー解決の記録として参考までに、以上!

About: dacelo


Leave a Reply

Your email address will not be published. Required fields are marked *