[PHP-users 22016]Re: mb_ereg_replaceでパターンの特定回数マッチ

ISIGE, Akira xia @ silvia.com
2004年 6月 5日 (土) 16:04:33 JST


いしげ です.

On 2004/06/05 14:48:16 JST,
designo @ agate.plala.or.jp wrote:

> echo mb_ereg_replace("%%1", "%1", mb_ereg_replace("([^%])%1", $replace, $string));
> とするとよいと思います。

designo さんのコードですと,$string の先頭に "%1" があった場合に
正常に置換されないように思えます.
それと,"%1%1" というパターンの際に,
ひとつ目の %1 を置換した時点でポインタが先に行ってしまうので,
ふたつ目の [^%] にマッチしないため %1 自体が置換されません.


$string に確実に含まれない文字やパターンが存在する前提であれば,
例えば $string に \xff が含まれないとすると
<?php
echo str_replace("\xff", '%', str_replace('%1', $replace, str_replace('%%', "\xff", $string)));
?>
とすればよいのですが……

完全な汎用性を求めると,
<?php
echo str_replace("%$replace", '%1', str_replace('%1', $replace, $string));
?>
くらいしか思いつきません(なんてカッコ悪いコードなんだ(w

# 必要に応じて str_ を mb_ereg_ とか preg_ に変更してください.


--
ISIGE, Akira



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