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