• ベストアンサー

正規表現eregとpreg

pregがperl互換の正規表現というのは分かったのですが、eregとpregは使い分ける用途などがあるのででしょうか? あるhtmlから<a herf="--">タグを抜く作業に苦労していまして、調べるとどちらも使われているようで、正規表現を勉強するのにも戸惑っています。 せひ宜しくお願いします。

  • fabu
  • お礼率69% (384/554)
  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • aqucent
  • ベストアンサー率39% (78/200)
回答No.1

個人的には、pregの方が多機能で高速なので、pregの方を使いたくなってしまいます。 (preg_replace_callbackが用意されている点とか) mb_ereg と preg ならともかく、eregとpregではeregを選ぶメリットが見いだせないのですが…、どうなんでしょう。 > あるhtmlから<a herf="--">タグを抜く作業に苦労していまして こんな感じでしょうか? $result = preg_replace('/<a [^>]*href=[^>]*>/', '', $target);

fabu
質問者

お礼

ありがとうございます。 pergを重点的に使う方が正解なのかも、ですね。お答えまでありがとうございます。

その他の回答 (1)

  • aqucent
  • ベストアンサー率39% (78/200)
回答No.2

本質からズレちゃうかもしれませんが、preg は正規表現のマニュアルが載っている点でも親切です。 正規表現で苦労されているのでしたら、マニュアルがある分、pregの方が習得しやすいかもしれません。 # 私の探し方が悪いのかもしれませんが、eregの方はマニュアルに見つかりませんでした。 # なので、私は未だにeregを使いこなせていません。(学びたての頃に少しかじった程度で、pregを知ってからは使わなくなってしまいましたw) あと、pregは対象がUTF-8の文字列ならマルチバイトに対応していますので、上手くエンコードを合わせれば、mg_eregを使わなくて済みます。 pregにはeregにないメリットが多いので、個人的には pregを使って問題が出たら、eregやmb_eregへの代替を検討すればいい、と思っています。 # あくまで個人的な意見なので、専門家の方からみれば、また違った意見があるかと思います。

参考URL:
http://www.php.net/manual/ja/ref.pcre.php
fabu
質問者

お礼

ありがとうございます。 やはりpregですね。少し感じたことは、正規表現は置換をとっても正解が一つだけでないので、好きなものを使っていればいいのかも知れませんね。

関連するQ&A

  • preg_replaceでの正規表現について

    お世話になります。 ereg_replace で書いた正規表現による置換処理を、 preg_replace に置き換えようとしています。 (preg_replaceの方が処理が速いとマニュアルにあったので) ところが、preg_replaceでの正規表現検索がうまくいかないで困っています。 基本的には、ereg_replaceの正規表現部分を//で囲んでいるだけです。 具体的には、下記のような処理を書いています。 間違いがあれば、ご指摘いただけましたら幸いです。 //### うまくいっている ereg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='\{dokuji tag\}.+\{_dokuji tag\}'; $replace=''; $html=ereg_replace($search,$replace,$html); //不要部分の削除 //### うまくいっている ereg_replace のパターン ここまで ### ↓ //### うまくいかない preg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='/\{dokuji tag\}.+\{_dokuji tag\}/m'; $replace=''; $html=preg_replace($search,$replace,$html); //不要部分の削除 //### うまくいかない preg_replace のパターン ここまで ### //### 置き換えるソース('template/temple.html') ここから ### <!-- {dokuji tag} --> <tr> <td nowrap><strong>タイトル:</strong></td> <td> <input type="text" name="name" size="80" value="{name}" /> </td> </tr> <!-- {_dokuji tag} --> //### 置き換えるソース('template/temple.html') ここまで ### よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • POSIX系(ereg)とPerl互換系(preg_match)、PHPの実務で多用されるのはどっち?

    PHPの実務の現場で、好んで使用される正規表現関数は、 POSIX互換かPerl互換かどちらでしょうか? 場合によりけりでしょうか? それとも、Perlを知らないプログラマーは、ereg や ereg_replace しか使っていなかったり、 逆に、機能が豊富な preg_match や preg_replace の方が好まれるのでしょうか? 今後、PHPプログラマーと共同で開発することを考えれば、どちらを使用すればいいでしょうか? ※POSIX互換では、数字の \d って使えないんですか?

    • ベストアンサー
    • PHP
  • エスケープ文字そのものにマッチさせる正規表現

     お世話になっております。  PHPの正規表現でエスケープ文字\そのものにマッチさせる正規表現がなかなか作れません。Perl互換のpreg_replaceなども試してみましたがダメでした。エスケープ文字そのものを削除したいのですが、どうしたらよいでしょうか? $value = ereg_replace ('\\', '', $value);//ダメでした。 $value = preg_replace ('/\\/', '', $value);//同様にダメでした。 $value = preg_replace ('/[\\]/', '', $value);//同様にダメでした。  文字列中に\が入っていたり、単独で\があった場合は必要ないので削除するといった感じです。 $value = ereg_replace ('[][}}{)(!"#$%&\\~|*+,/\^\'<>`;:?\\=]', '', $value); これでいけるかと思ったのですが、\だけ残ってしまいます。最後辺りの\\で\文字それ自体にマッチするかと思うんですが…。 わかる方がいらしたらおしえてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP ereg_replaceの使い方と正規表現

    PHPを使いだしてまだ1週間足らずです。 Perlに置き換える作業をしています。 $listnumber = ereg_replace('^[^0-9]* 0*([0-9]+) .*$', '\\1', $listnumber); これが、いったい何をしていているのか。 ついでに、Perlに置き換えると、どうなるのか教えていただけると 大変助かります。 作業日数が少なくて、勉強する時間もなくて大変困っています。 助けてください。

    • ベストアンサー
    • PHP
  • 正規表現

    正規表現に疎いので質問させてください。 $param = ereg_replace('/?$', '', $_SERVER['REQUEST_URI']); これをpreg_matchで書くとどうなりますか? よろしくお願い致します。

    • 締切済み
    • PHP
  • 正規表現でpreg_系を使ってタグ内は置き換えないようにする方法

    正規表現でpreg_系を使って、半角スペースを&nbsp;に置き換える処理をしたのですが、タグ内のスペースも&nbs;に置き換わってしましました。 タグ内は置き換えないようにするにはどのようにしたら良いでしょうか? データは複数行渡っています。以下はタグが置き換わるので、逆にタグでないものを置き換えたいです。 <?php function test_call($matches){ return str_replace(" ","&nbsp;",$matches[0]); } $data = <<< EOT この横は変換 します。 <a href="http://www.yahoo.co.jp/" target="_blank">タグの半角スペースは変換せず、 この横は変換する。 </a> このタグも変換してはいけません。< br/> EOT; $data = preg_replace_callback('/<("[^"]*"|\'[^\']*\'|[^>])*>[ ]?/', "test_call", $data); var_dump($data); ?>

    • ベストアンサー
    • PHP
  • preg_replaceの正規表現を教えて下さい。

    preg_replaceの正規表現を教えて下さい。 元:'あいうえお<meta content=\"text/html; charset=Shift_JIS" />かきくけこ' 後:'あいうえお<meta content=\"text/html; charset=utf-8" />かきくけこ' というように、charset= に続く部分を preg_replaceで置換したいのですが、スキル不足でできません。 $a = 'あいうえお<meta content=\"text/html; charset=Shift_JIS" />かきくけこ'; $p = "/<meta.*charset=([^\"']+)[^>]/i"; $x = preg_replace( $p, "utf-8", $a ); とやってみましたが、$xには、全く期待通りの結果は得られませんでした。 この置換を実現できる正規表現を教えて下さい。

    • ベストアンサー
    • PHP
  • PHPの正規表現について

    // URLエンコード $str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; $str =~ tr/ /+/; これをPHPの関数を使った方法と使わなかった方法が知りたいです。 また、正規表現で、ereg.., preg.., mb_eregがありますが、この違いの詳細が知りたいです。

    • ベストアンサー
    • PHP
  • http://とhttps://のどちらでもマッチングできる正規表現

    http://とhttps://のどちらでもマッチングできる正規表現の書き方が分かりません。aタグの中のhref="のあとのURL部分にhttpでもhttpsのどちらでもOKのマッチングをかけたいです。 具体的にはhttp://www.aaa.co.jpでもhttps://www.aaa.co.jpのどちらでもpreg_match_allでマッチングをかけたいです。 $count=preg_match_all("正規表現",$URL,$maches); という感じでhttpかhttpsのURLに引っ掛けたいです。 教えてください

    • ベストアンサー
    • PHP
  • 正規表現のサンプル豊富なサイト

    正規表現の素人です。 サンプル豊富なサイトで勉強させていただきたいのですが、適当なサイトをご紹介いただけないでしょうか。 #perlはわかりません。 #aspのコンポネントでperl互換の正規表現を利用するための勉強。 #aspも初心者レベル。

    • ベストアンサー
    • Perl

専門家に質問してみよう