アプリ版:「スタンプのみでお礼する」機能のリリースについて

あいうえおかきくけこあいうえおあいうえお

という文字列があった時、
初回の「あいうえお」のみ空に置換して

かきくけこあいうえおあいうえお

としたいのですが、str_replace()だと全部置換されてしまいますし、
preg_replace()やmb_ereg_replace()ではうまく置換されません。
対象とする文字列は、実際はHTMLタグやマルチバイトが混じっています。

置換するべき文字列は、全く同様のものが対象文字列内にも必ず含まれています。

preg_replace()やmb_ereg_replace()でも可能なのかもしれませんが、
どうやればいいのか分かりませんでした。
どなたかご教示下さい。

A 回答 (1件)

> str_replace()だと全部置換されてしまいますし、


> preg_replace()やmb_ereg_replace()ではうまく置換されません。

preg_replace/mb_ereg_replace でも全置換になりそうな気がするのですが
どのように「うまく置換されなかった」のでしょうか?

それはさておき、
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit [, int &count]] )

のように、省略可能な引数の中に
limit

subject 文字列において、各パターンによる 置換を行う最大回数。デフォルトは -1 (制限無し)。

というのがありますので、ここに1を設定して実行すればよいのではないでしょうか?

この回答への補足

なんか色々試していたら、以下で出来ました。

$str = '<a href="aaa.html">あいうえお</a>かきくけこ<a href="aaa.html">あいうえお</a>';
$var = '<a href="aaa.html">あいうえお<\/a>'; //先に色々処理した結果
$str = preg_match("/".$var."/", "", $str, 1);

最初に試してみた時にはエラーも出ず置換もされず、だったのですが、
その時の状態が既にもうない為再現する事が出来ませんでした。

上記で可能である事が分かりましたが、色々処理した結果に特殊文字を
エスケープしてあげないといけないので、素直に文字数を取得して
mb_substr()させるようにしようかと思います。
スピード的にどっちが早いのか分かりませんが。

ありがとうございました。

補足日時:2007/08/16 16:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!