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

斉藤 m-saitoh @ yamatosokki.co.jp
2008年 1月 16日 (水) 09:31:33 JST


斉藤と申します。

if (mb_ereg("申込番号  ?(\d{1,5}) ? ", $rtn, $arr)) {
    echo "申込番号 = " . $arr[1];
} else {
    echo "申込番号 = なし";
}

で取得可能です。
ただし、EUCかUTF-8でないと無理っぽいです。

shift-jisだと

if (mb_ereg("込番号  ?(\d{1,5}) ? ", $rtn, $arr)) {

にすれば取れるみたい
「申」の文字コードの問題のようです。
そこら辺は識者の方にお任せいたします。

> ....
> ....
> &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 メーリングリストの案内