ereg_replace関数の使い方とは?

このQ&Aのポイント
  • ereg_replace関数について教えてください。
  • PHPのereg_replace関数を多数使用していますが、PHP 5.3.0以上では使えないことがわかりました。
  • PHP 5.3.0以上で動作するようにereg_replace関数の記述方法を教えてください。
回答を見る
  • ベストアンサー

ereg_replace関数に関して

教えて下さい。 プログラム上でereg_replace関数を多数使用しています。 この関数は、PHP 5.3.0以上では使えない事がわかり、他の関数に切り替えたいと考えて いますが、書き方がわかりません。 以下の記述をPHP 5.3.0以上で動作させる為には、どのように記述すれば良いでしょうか? 《現在の記述》 $dest=ereg_replace('^', '&gt;' ,$dest); $dest=ereg_replace("\n", "\n>" ,$dest); $dest = ereg_replace("http://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $src); 初歩的な質問で申し訳ありませんが、教えて下さい。 よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>3行目に関してですが、画面から取得したメッセージを、作成した変換関数へ飛ばして いや、そうじゃなくて、どういう文字列をどう変換したいか具体的にという 意味だったんですけどね・・・ まぁ推測してhttp://からはじまりスペースかタグがきたらやめるってこと なのかなぁ・・・元コードが微妙なのでなんとも言えませんが <?PHP $pattern=array("/^/mis","/http:\/\/.*?(?=[<>\s])/"); $replacement=array("&gt;","<a href=\"\\0\">\\0</a>"); $dest=<<<eof test<br> testhttp://exsample.com<br> test<br> testhttp://exsample.com/foo/bar/test test<br> test<br> testhttp://exsample.com/foo/bar/test<span>test</span><br> test<br> testhttp://exsample.com/foo/bar/test/<br> test<br> eof; $dest=preg_replace($pattern,$replacement,$dest); print $dest; ?>

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

上2行については 本当に先頭は&gt;なのに、2行目以降は>でよいの? 両方&gt;でよいならこんな感じ? $pattern="/^/mis"; $replacement="&gt;"; $dest=preg_replace($pattern,$replacement,$dest); 3行目についてはロジックが微妙なので具体的な例示をした方がよいかも

asamix_000
質問者

お礼

yambejp様、細かく教えて頂いて本当にありがとうございます! 3行目に関してですが、画面から取得したメッセージを、作成した変換関数へ飛ばして ereg_replaceをしました。 $message2 = convert_message($message); function convert_message($src) { $dest = ereg_replace("http://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $src); return $dest; } これでわかりますでしょうか、、、 わかりにくくて申し訳ありませんが、教えて下さい。 よろしくお願いします。

  • kool_noah
  • ベストアンサー率33% (95/285)
回答No.1

preg_replace関数 http://www.php.net/manual/ja/function.preg-replace.php PHP ManualにPECL拡張モジュールを推奨する旨が書いてあります

asamix_000
質問者

お礼

kool_noah様、ご回答ありがとうございます。 URLありがとうございました。

関連するQ&A

  • PHP5.3以降のereg_replaceについて

    PHP5.3以降にアップデートしたところ、ereg_replaceで書かれている箇所で警告が出るようになりました。 マニュアルを見た限りではpreg_replaceへの移行が推奨されているようなので、preg_replaceに書き換えようと思い、http://melma.com/backnumber_129036_1571788/を参考に、2つ目のパラメータの前後に/を付けましたが、画面に何も表示されず、どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 なお、ソースは下記となります。 また、記述はhttp://okwave.jp/qa/q849820.html?&status=true&errcode=&msg=&qid=849820を使用させていただいており、やりたいことはURLに自動的にハイパーリンクを付加したいという状況で、ereg_replaceを使用すればできております。 <?php $proto = "私のブログはhttp://www.hoge.com/です。"; $proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$proto); //$proto = preg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","/<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>/",$proto); print $proto; ?> 以上、宜しくお願いします。

    • ベストアンサー
    • PHP
  • mysqlの関数でereg_replace

    レコードから、特定のドメインを含むURLを消去する、といった動作をmysqlの関数で実現しようと考えてます。phpで言うところのereg_replace()のような関数がmysqlであるかどうかということです。 以下のように"bbs"というテーブルの"com"というフィールドからURLに値する文字列を消去するSQL分を実行しましたがこれは動作しませんでした。 update bbs set com = replace(com,regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)','') where com regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)'; replace関数の第二引数にregexpを使用することができませんでした。(やり方が間違ってるのでしょうか?) phpのereg_replaceを使用してフィールド"com"に含まれるURLを消去していくというやり方で実現は可能なのですが、動作の軽さやソースのシンプルさを考え、SQL文で実現することを考えてます。 mysqlのヴァージョンは3.23.58です。 よろしくお願いいたします。m(__)m

  • mb_ereg_replace関数の正規表現

    PHPでmb_ereg_replace関数を使って、任意の文字列から文字列"あい"でない文字を抽出したいと考えております。 その際に、[^あい]と記述すると、"あ"又は"い"でない文字を抽出することになり目的を果たせません。 就いては、ブラケット内で文字列を扱う方法の有無および、あるのであればその方法、ないのであればその代替案をご教示いただきたくお願い申し上げます。

    • ベストアンサー
    • PHP
  • textarea内のタグを反映させたいのですが

    http://okweb.jp/kotaeru.php3?q=984300を参考に 改行を犠牲にして自動リンクを利用できるようにしたのですが、 HTMLの一部に編集内容を反映したいため FONTタグ等も利用したいんです。 何か良い方法はありませんでしょうか? よろしくお願いします。 <?PHP 文字制限のため省略ですが参考元と同様です。 ?> <html> <title>テキストファイルのデータ更新</title> </head> <body> <form method="post" action="edit.php"> data1の変更 - <textarea name ="data1" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data1']); ?></textarea><br> data2の変更 - <textarea name ="data2" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data2']); ?></textarea><br> data3の変更 - <textarea name ="data3" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data3']); ?></textarea><br> <input type="submit" value="送信"> </form> <table> <tr><td>data1</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data1']); ?></td></tr> <tr><td>data2</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data2']); ?></td></tr> <tr><td>data3</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data3']); ?></td></tr> </table> </body> </html>

    • 締切済み
    • PHP
  • join関数について

    phpのjoin関数について教えてもらえないでしょうか? $temp = ereg_replace("[\r\n]", "", join( ",", $CsvData[ $i ] ) ). "\n"; アドバイスお願いします。

    • 締切済み
    • PHP
  • php5.3.3でeregをループ内で使用すると

    php5.3.3でeregをループ内で使用すると動作がとまり、エラーログにも何も出力されません。 10回目のループでなぜか動作がとまるようです。 $mail=""; $fp=fopen("php://stdin", "r"); while(!feof($fp)) $mail.=fread($fp, 10240); fclose($fp); $MailArray = explode("\n", $mail); $Counter = 0; $InputCheck = new InputCheck(); for ($i = 0; $i < count($MailArray); $i++){ if (strpos($MailArray[$i], "From: ") === 0){ $From = str_replace("From: ", "", $MailArray[$i]); $From = ereg_replace(">.*$", "", $From); $From = ereg_replace("^.*<", "", $From); $From = ereg_replace("\r", NULL, $From); if(!$InputCheck->isRightEMail($From)){ $i++; $From = str_replace("From: ", "", $MailArray[$i]); $From = ereg_replace(">.*$", "", $From); $From = ereg_replace("^.*<", "", $From); $From = ereg_replace("\r", NULL, $From); } } else if (strpos($MailArray[$i], "To: ") === 0){ $To = str_replace("To: ", "", $MailArray[$i]); $To = ereg_replace(">.*$", "", $To); $To = ereg_replace("^.*<", "", $To); $To = ereg_replace("\r", NULL, $To); if(!$InputCheck->isRightEMail($To)){ $i++; $To = str_replace("To: ", "", $MailArray[$i]); $To = ereg_replace(">.*$", "", $To); $To = ereg_replace("^.*<", "", $To); $To = ereg_replace("\r", NULL, $To); } } } 上記は空メールされたfromとtoを取得するものです。 eregをpregに変えれば問題なく動作します。 5.3以降からeregは非推奨になりましたが、使用することはできるようですが、ループ内で使用するとなぜか動作がそこでストップします。 非推奨の関数を使用すると動作が止まりエラーログにも出力されないことはよくあるのでしょうか? エラーログに出力されなかったため原因を特定するのに苦労しました。 eregなどの非推奨関数を使用した場合の不具合に関してご教示頂けると幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • ereg_match関数について

    こんばんは。PHP初めて間もないド素人です。とあるサイトを参考に、バイナリセーフ関数とかいうのととそうでない関数の処理の違いを検証してみようと思い、以下のコードを試してみました。 <?php //preg_match関数がバイナリセーフ関数である事を検証する。 //正規表現文字列にマッチしない文字があれば1を返す。 $kekka=preg_match('/[^a-zA-Z0-9_]/','oh_my_god\x00@'); $kekka2=ereg_match('/[^a-zA-Z0-9_]/','oh_my_god\x00@'); print($kekka); print("<br/>"); print($kekka2); ?> <!--<html>タグがないのにいきなり<br/> とか打っても大丈夫か試してみる。 print_rと打ってみたらなにか変わるか試してみる。--> <br/> <?php print_r($kekka); ?> これを試した結果、 Fatal error: Call to undefined function ereg_match() ...... というエラーがでました。ereg_match関数についてインターネットで 調べてみたのですがヒット率が異常に悪く「もしかしてpreg_match?」 とか表示されたりもしました。今php5を使ってますが、もしかして この関数はもうなくなった関数なのでしょうか?

    • ベストアンサー
    • PHP
  • 【PHP】ereg_replace() にて置換の実行有無の確認方法は?

    PHP(Ver5)について質問です。 ereg_replace() 等の置換関数は実際に置換したか(マッチしたか)否かの応答はないのでしょうか? 現状、置換前文字列と置換後を比較して確認しているのですが、なんだか原始的のような気がして… 効率的な方法がありましたら教えてください。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • php 正規表現で、\マークを取り除くには?

    php で ereg_replace関数を使って¥マークを取り除きたいのですが、 ereg_replace("\\", "",$str); と記述すると Warning: ereg_replace() [function.ereg-replace]: REG_EESCAPE in C:\xampp... とエラーになってしまいます。 どうすれば正規表現により円マークを取り除くことができるのでしょうか?

    • ベストアンサー
    • PHP
  • mb_ereg_replaceに関して

    こんにちは。お世話になっております。 開発時(PHP5.1.4)では何ら問題なかったものが、レンタルサーバー上(PHP5.0.4)へアップロードしたら、mb_ereg_replace関数の部分でエラーが出て対処に困っております。 エラー文 Call to undefined function mb_ereg_replace() $key = $_GET['key']; $key = addslashes($key); $key = mb_convert_encoding($key, 'EUC-JP', 'auto'); $key = mb_ereg_replace(" ", " ", $key);//ココでエラー $arr = explode(" ",$key); 上記は実際のソースの一部ですが、GETで渡された文字列(検索キーワード、key=○○)をDB(MySQL)に登録のあるデータを検索する。といった結果を願い設置しております。 借りたサーバ(共有)は、(適切な言葉じゃないかも知れませんが)PHPはCGIのもと動かしているようですが、これも原因の一つなのでしょうか? お忙しいなか恐縮ですが、ご指導のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP

専門家に質問してみよう