[PHP-users 33107] Re: mb_ereg_replace について

Tomoo Nomura nomurat @ tmo.co.jp
2008年 1月 16日 (水) 16:39:31 JST


斉藤 さん

こんにちは。
> if (mb_ereg("申込番号  ?(\d{1,5}) ? ", $rtn, $arr)) {
>     echo "申込番号 = " . $arr[1];
> } else {
>     echo "申込番号 = なし";
> }
>
> で取得可能です。
>   
うまく行きました。採用!  $arr[0]ではなく$arr[1]を参照するのですね。こ
れはマニュアルにはなく気がつきませんでした。よくよく考えればarrayだから
eregと同じ仕様なんですね。
また、mb_eregは 正規化表現"."に"\n"も含めるようですね。ちょっと規則違反
のように思いますが。。。eregも同じのようです。ただし、 \dは使えないよう
ですが。。。。
歴史的経緯もあるのでしょうが、少しずつ違うようでなかなか難しいです。

パパぱふぅ さん

> 1)変数からstrtokを使って1行ずつ読み込み、mb_eregで番号部分を取り出す。

   上と同じなのでOKです。

> 2)preg_match_allで一気に取り出す。

   "\n"を省いてやるのとマルチバイトの影響が少し気になります。preg_xxxはマルチバイトを保証しているのでしょうか?


有難うございました。

野村



>> ....
>> ....
>> &nbsp;&nbsp;申込番号&nbsp; 756 &nbsp; </td>
>> ....
>> .....
>>
>> とあるところの"756" です。
>> mb_ereg_replace は改行文字(\n)も正規化文字(.)に含めるオプションがありま
>> すので、これを使うと便利なのですが、
>> $num = mb_ereg_replace( "(.*申込番号&nbsp; ?)(\d{1,5})( ?&nbsp;.*)",
>> "$2", $rtn, "m" ) ;
>> としてやると、$num に "$2" と入ってしまって、2個目のマッチした文字に置き
>> 換わりません。
>> 致し方なく、
>> $rtn = str_replace( "\n", "", $rtn ) ;
>> $num = preg_replace( "/(.*申込番号&nbsp; ?)(\d{1,5})( ?&nbsp;.*)/",
>> "$2", $rtn ) ;
>> として、なんとか動いているのですが、あまりエレガンスではないのと、
>> preg_replaceがマルチバイトに対して問題がないのか、2点気になっています。
>> なにかもっと良い解決策はないでしょうか?
>> とりあえず動いていますので、気軽にアドバイスして頂くと助かります。
>>     
>
> -=-=-=-=-=-=-=-=-=-=-=-=-=-
> m-saitoh @ yamatosokki.co.jp
>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>
>
>   


-- 
****** Nomura Technical Management Office Ltd. *****************
 Tomoo Nomura      nomura @ tmo.co.jp       http://www.tmo.co.jp/
    Phone: +81-78-797-0240 Fax: +81-50-3428-2033
 Worldwide Airline Timetable 'Flight Planner'
 European Electronic Timetable 'HAFAS'         ValueFax Support
****************************************************************



PHP-users メーリングリストの案内