• ベストアンサー

POSIX系(ereg)とPerl互換系(preg_match)、PHPの実務で多用されるのはどっち?

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

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

  • ベストアンサー
回答No.1

アンケートのつもりで気軽に答えます。 自分は日本語を使う可能性があれば、mb_ereg、 日本語を使う必要が絶対に無いと分かっていれば、 もしくは、日本語が入っても問題なく動きそうなら、pregを使います。 eregを使うことはありません。

sweepea
質問者

お礼

ありがとうございます。 アンケート的な回答でも構いません。 UTF-8 なら、preg系でも大丈夫のようですね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

こんなサイトを見かけたので紹介しておきます。 http://ifs.seesaa.net/article/26300967.html [PHP] mb_ereg()じゃない、preg_match_all()に/uをつけるんだ!

参考URL:
http://ifs.seesaa.net/article/26300967.html
sweepea
質問者

お礼

ありがとうございます。 マニュアルにも書いてありましたね。 機能が豊富で、高速とあれば、preg系でいきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【PHP】「ereg_match」はなぜ不人気なのか?

    PHP初心者です。 現在ファイルの中を英語や日本語で検索するプログラムを作っています。 検索といえば「preg_match」が一番人気あるように見えます。しかしたとえば、 mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); if(preg_match( '/我輩は.である/' ,'我輩は猫である')){ print "マッチ!"; } 上記のような使い方をすると「.」は「猫」にマッチせず「...」にするとようやくマッチします。「preg_match」はマルチバイトに対応していないのでしょうか。 そこでマルチバイトと正規表現に対応した検索関数「mb_ereg_match」を知りました。 if(mb_ereg_match( '我輩は.である' ,'我輩は猫である')){ これなら正常にマッチします。 がしかし… 「mb_ereg_match」は全然辞書に載ってません。分厚いPHP辞書をいくつも持ってますが「ereg_match」すら載ってません。何か不人気の理由があるのでしょうか?気に入ったのに不安で使えません。 お詳しい方、解説よろしくお願いいたします。

    • 締切済み
    • PHP
  • 正規表現eregとpreg

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

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

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

    • ベストアンサー
    • 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」って何の略ですか?

    PHPは ereg とか preg とかいう関数がよく出てきますがこれは何の略語なんでしょうか? pはPerlのことなのかなくらいは見当がつきますが… よろしくお願いいたします。

    • 締切済み
    • PHP
  • 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
  • 「Perl 互換の正規表現の POSIX API」の日本語対応

    環境は OS:Windows XP, コンパイラ:C++Builder6 です。 C++Builder6 付属の正規表現ライブラリ (「Perl 互換の正規表現の POSIX API」というもののようです) を使ってプログラミングしています。 このライブラリは日本語対応していないらしく、パターンを /[  ]/ ([]の中には全角空白1個と半角空白1個が書かれています) にしてコンパイルしマッチングを行うと、「@」や 「香」の第2バイトがマッチしてしまいます。 全角空白または半角空白だけにマッチするようにするには どうすれば良いでしょうか?

  • PHPの正規表現「ereg」で特定の数字範囲をマッチさせたい

    PHPの正規表現「ereg」で特定の数字範囲をマッチさせたい 宜しくお願い致します。 PHPの正規表現で、0~99までの数字があり、そのうち、「4~6」と「11~15」までの数字以外の場合にマッチさせる正規表現について教えて下さい。 自分なりに作ってみた正規表現パターンは下記の通りです。 ereg("([^4-6]{1})|[^11-15])",$hoge) もしくは ereg("([^4-6]{1})|[^11-15]{2})",$hoge) で試してみましたが、「4~6」はマッチしないのですが、「11~15」の時にもマッチしてしまいます。 どうすればいいのか、どなたか助けて下さいー!

    • ベストアンサー
    • PHP
  • PHPの正規表現「preg_match」で漢字を含む場合のマッチパター

    PHPの正規表現「preg_match」で漢字を含む場合のマッチパターンについて 宜しくお願い致します。 preg_matchを使っての正規表現で、「あいうえおかきくけこ3月10日さしすせそ」という文字列から「3月10日」だけを抽出するには、どういうパターンが良いのでしょうか? 下記の様にやってみましたが、だめでした。。。 preg_match("/\d{1,2}[月]\d{1,2}[日]/",$hoge,$match) これではうまくいきません。 どなたかお助けくださいー!

    • ベストアンサー
    • PHP
  • PHP:preg_match_allで複数条件指定

    preg_match_allで複数条件を設定する方法についてお尋ねします。 環境 PHP:5.1.6 MySQL:5.0.77 --------ソース例------------------------------------------ <a href="1000/23">1: 【国語】接続後について (授業1) (20)</a> <a href="1000/26">2: 【数学】分数 (206)</a> --------------------------------------------------------- 上記のようなHTMLソースを分解してMySQLに登録することを考えています。 (1行目) 1000/23 | 1 | 【国語】接続後について (授業1) | 20 (2行目) 1000/26 | 2 | 【数学】分数 | 206 という形に a hrefの中身 |スレッド番号 | タイトル | コメント数 4つに分解してMySQLに登録します。 正規表現を学んで、個別にデータを取り出すことはできました。 以下に作成したソースを記載します。 $contents='<a href="1000/23">1: 【国語】接続後について (授業1) (20)</a><a href="1000/26">2: 【数学】分数 (206)</a>'; preg_match_all( '/<a href="(.*?)">/su', $contents, $match ); foreach ( $match[ 1 ] as $var ) { echo htmlspecialchars($var)."<br>"; } preg_match_all( '/">([0-9]*?):/su', $contents, $match2 ); foreach ( $match2[ 1 ] as $var2 ) { echo htmlspecialchars($var2)."■<br>"; } preg_match_all( '/[0-9]: (.*?)\([0-9]*\)<\/a>/su', $contents, $match3 ); foreach ( $match3[ 1 ] as $var3 ) { echo htmlspecialchars($var3)."■<br>"; } preg_match_all( '/\(([0-9]*?)\)</su', $contents, $match4 ); foreach ( $match4[ 1 ] as $var4 ) { echo htmlspecialchars($var4)."●<br>"; } 【実行結果】 1000/23 1000/26 1 2 【国語】接続後について (授業1) 【数学】分数 20 206 1行ずつMySQLに登録したいので preg_match_all( '/条件1,条件2,条件3,条件4/su', $contents, $match ); のような形で指定して個々の値を下記の変数に入れることは可能でしょうか? ループ処理開始{ $url $num $title $res //MySQLに接続 //データ登録 }

    • ベストアンサー
    • PHP
EP-805A対応について
このQ&Aのポイント
  • EP-805AプリンターのWindows11対応について
  • EP-805AプリンターはWindows11との互換性がありますか?
  • EP-805Aプリンターは最新のWindows11に対応していますか?
回答を見る

専門家に質問してみよう