eregの代わり【PHP 5.3.x 以降】

正規表現でよく使っていた「ereg」系の関数ですが、
PHP5.3.0では非推奨となり、PHP6以降は廃止予定

mb_ereg」に置換えても大丈夫だと思うが、推奨されているのは「preg_match

preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

です。

すでに当方のサーバーでは

Deprecated: Function ereg() is deprecated in・・・

なんていうエラーメッセージが出ます。

で、単純に「ereg」を「preg_match」に書き換えてもエラーになります

これは「preg_match」の検索文字列(string $pattern のとこ)をデミリタ(/:スラッシュ)で囲む必要があるためです。

$subject = "正規関数を使う場合の注意「http://demo.s1jp.com/notes/?p=427」";
$pattern = "(https?|ftp|news)(://[[:alnum:]¥S¥+¥$¥?¥.%,!#~*/:@&=_-]+)";
ereg($pattern, $subject, $matches);
print $matches[0];
$subject = "正規関数を使う場合の注意「http://demo.s1jp.com/notes/?p=427」";
$pattern = '/(https?|ftp|news)(:\/\/[[:alnum:]¥S¥+¥$¥?¥.%,!#~*\/:@&=_-]+)/';
preg_match($pattern, $subject, $matches);
print $matches[0];

当然のことながら、検索文字列をデミリタで囲ったら、文字列の中に「/」が入っているとデミリタとして認識されてしまうので、エスケープシーケンスを書き加える必要があります。

× エスケープを追加してない例
”/(https?|ftp|news)(://[[:alnum:]¥S¥+¥$¥?¥.%,!#~*/:@&=_-]+)/”

○ エスケープを追加した例
”/(https?|ftp|news)(:\/\/[[:alnum:]¥S¥+¥$¥?¥.%,!#~*\/:@&=_-]+)/”

こんなもんかな・・・けっこう面倒・・・。

当方のサーバーでは、今のところ「mb_ereg」を使ってもエラーはまだ出ませんが、今後は「preg_match」を使いましょう。

おまけ

検索文字列が含まれるか確認する(最初に現れる位置を見つける)なら「strstr」関数がおすすめです。

$email  = 'name@example.com';
$domain = strstr($email, '@');
echo $domain; // @example.com と表示します

$user = strstr($email, '@', true); // PHP 5.3.0 以降
echo $user; // name と表示します

「strstr」は、検索文字列と検索対象の記述順が「ereg」や「preg_match」と逆なのでちょっと紛らわしいですが・・・。

参考サイト

PHP マニュアル

コメントはお気軽にどうぞ!

ここがBEFORE

CAPTCHA


上記の内容で問題なければ、下記「コメントを送信する」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)