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

designo @ agate.plala.or.jp designo @ agate.plala.or.jp
2004年 6月 5日 (土) 14:48:16 JST


designo です。

> こんにちは。miyと申します。
> 
> mb_ereg_replaceを使って$string中の「%1」を$replaceに置換したい(ただし
> 「%%1」は「%1」としたい)と思い、
> 
> echo mb_ereg_replace('%%1', '%1', mb_ereg_replace('%{1}1', $replace, $string));
> 
> としました。

これでは %1 のみでなく %%1 にもマッチしてしまいます。

> ここで$replaceを「テスト」、$stringを「これは%1です」とすると正しく「こ
> れはテストです」と表示されるのですが、$stringが「これは%%1です」とすると
> 「これは%テストです」となってしまいます(期待している出力は「これは%1です」)。
> 
> この場合正しい処理の仕方をご教示頂ければ幸いです。

$replace = "\\1テスト";
$string = "これは%%1です";
echo mb_ereg_replace("%%1", "%1", mb_ereg_replace("([^%])%1", $replace, $string));

とするとよいと思います。

これは、まず "%1" の前に "%" がないものを "テスト" に置換したあと、
"%%1" を "%1" に置換するというものです。

置換文字列に部分文字列を含めるということです。詳しくは

  ereg_replace
    http://jp.php.net/manual/ja/print/function.ereg-replace.php

をご覧ください。


--------
designo <designo @ agate.plala.pr.jp>



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