これ何て呼びますか

お世話になります。
特定のタグに囲まれたテキスト部分の特定文字列を置換したいと思うのですが
なかなか解決策が浮かばず困っています。

例えば
$str = <<< EOM
<a href="watanabe/nakamura/test.html" alt="watanabesan">これがwatanabeですよ</a>
<a href="watanabe/nakamura/test.html" alt="nakamurakun">これがnakamuraですよ</a>
EOM;
という文字列があります

このaタグ間のテキスト部分の「watanabe」と「す」にだけ()を付けたい場合
どうすればいいでしょうか?
希望の結果
---
<a href="watanabe/nakamura/test.html" alt="watanabesan">これが(watanabe)で(す)よ</a>
<a href="watanabe/nakamura/test.html" alt="nakamurakun">これがnakamuraで(す)よ</a>
---


単純に置換しただけではタグ内の該当文字列も置換されてしまい困っています
foreach (array("watanabe","す") as $keyword){
$str = eregi_replace($keyword,'('."\\0".')',$str);
}
---
<a href="(watanabe)/nakamura/test.html" alt="(watanabe)san">これが(watanabe)で(す)よ</a>
<a href="(watanabe)/nakamura/test.html" alt="nakamurakun">これがnakamuraで(す)よ</a>
---

正規表現を使ってタグ内の文字を抽出という方法も考え抽出は出来たのですが
置換をかけてタグ間に戻す所でつまずいてしまいました。

何か良い方法はありますでしょうか?
アドバイスよろしくお願いします。

A 回答 (1件)

/*


今回、そちらが提示した条件であれば、以下のスクリプトで対応できますが、
文字列の規則性が変わった場合などは対応できないかと思われますので、
誰か 正規表現に詳しい方に 後はお任せします。

今回、書いたのは こんな感じですが、他のアプローチの仕方もあります。
*/
$str = '
<a href="watanabe/nakamura/test.html" alt="watanabesan">これがwatanabeですよ</a>
<a href="watanabe/nakamura/test.html" alt="nakamurakun">これがnakamuraですよ</a>';
$DimRaplace = array("watanabe" => "(watanabe)" , "す" => "(す)");// 括弧をつけるのは自動化できるが、とりあえず、手入力で。

$DimData = explode("\n" , $str);
$out = "";
foreach($DimData as $i => $dat) {
$key = strip_tags(trim($dat));// 1.タグを取り除いた文字列。今回は「これがwatanabeですよ」他
$key02 = strtr($key , $DimRaplace);// 2.↑ 1を元に $DimRaplace に従い 文字列の置き換え
$out.= str_replace($key , $key02 , $dat);// 更に、元の文字列を対象とし、1と2の置き換え。
}
print nl2br(htmlspecialchars($out));
    • good
    • 0
この回答へのお礼

なるほど!目から鱗です!
教わった方法で目的の事が実現出来ました!
ありがとうございました。

お礼日時:2010/02/13 18:04

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