[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)) {
にすれば取れるみたい
「申」の文字コードの問題のようです。
そこら辺は識者の方にお任せいたします。
> ....
> ....
> 申込番号 756 </td>
> ....
> .....
>
> とあるところの"756" です。
> mb_ereg_replace は改行文字(\n)も正規化文字(.)に含めるオプションがありま
> すので、これを使うと便利なのですが、
> $num = mb_ereg_replace( "(.*申込番号 ?)(\d{1,5})( ? .*)",
> "$2", $rtn, "m" ) ;
> としてやると、$num に "$2" と入ってしまって、2個目のマッチした文字に置き
> 換わりません。
> 致し方なく、
> $rtn = str_replace( "\n", "", $rtn ) ;
> $num = preg_replace( "/(.*申込番号 ?)(\d{1,5})( ? .*)/",
> "$2", $rtn ) ;
> として、なんとか動いているのですが、あまりエレガンスではないのと、
> preg_replaceがマルチバイトに対して問題がないのか、2点気になっています。
> なにかもっと良い解決策はないでしょうか?
> とりあえず動いていますので、気軽にアドバイスして頂くと助かります。
-=-=-=-=-=-=-=-=-=-=-=-=-=-
m-saitoh @ yamatosokki.co.jp
PHP-users メーリングリストの案内