[PHP-users 31450] Re: 特定の文字列に囲まれていないキーワードを置き換える方法

江頭 竜二 ryu-ring.woo @ cap.ocn.ne.jp
2007年 2月 13日 (火) 15:27:07 JST


こんにちは

YuGo様、大原様、アドバイスありがとうございます。
本物のhtmlはわけあって出せないんですが、今度からもっと
具体的なものを提示するよう心がけますm( _ _ )m

今回、YuGo様の例でお話させて頂きますと、

$str = '<a href="hogeum">phogessd</a><img src="#" alt="shoges" />hoge' ;
$pattern = '/([^<]*)(hoge)([^>]*)/' ;
$replace = '$1<a href="./hit.html">hit</a>$3' ;
echo preg_replace ($pattern,$replace,$str) ;

上記スクリプトを実行すると、アンカータグに囲まれた「phogessd」まで
置き換えられてしまいます。
そうしますと、アンカータグの開始タグと終了タグのなかに、
またアンカータグが入ってしまう事になり、アンカータグの入れ子状態に
なってしまいます。
「phogessd」は置き換えせず、行末の「hoge」だけを置き換える方法はないで
しょうか?
「否定先読み?」などを使う必要があるのではないかと思っているのですが、
色々なサイトで調べてみても、どうしても理解できず困っています。

どうか宜しくお願い致します。


YuGo wrote:
> こんにちは。
> 例えば、下のようなのを試してみたらどうでしょう。
> 開始タグと終了タグに囲まれていないhogeを!hit!に置き換えようとしています。
> $str = '<a href="hogeum">phogessd</a><img src="#" alt="shoges" />hoge' ;
> $pattern = '/([^<]*)(hoge)([^>]*)/' ;
> $replace = '$1!hit!$3' ;
> echo preg_replace ($pattern,$replace,$str) ;
>
>
> それと、メールに書いてある抽象的な例ではなく本物のhtmlを出したほうがいい
> 案が集まると思います。
>
>
> 江頭 竜二 wrote:
>   
>> お世話になります。
>>
>> preg_replaceなどを用いて、html文章中の特定のキーワードを
>> リンク付の文字列に置き換えたいと考えています。
>>
>> その際に、アンカータグに囲まれたキーワードと、
>> imgタグのalt属性などに含むキーワードは無視させたいのです。
>> どなたかいい方法をご存知ではないでしょうか?
>>
>> (例)
>> <html>
>> <head>
>> <meta name="keywords" content="キーワード" /> ====> ( 無視 )
>> </head>
>> <body>
>> ・・・・・・・・・・・・
>> キーワード ===========>( <a href="・・・">キーワード</a>に変換 )
>> ・・・・・・・・・・・・
>> <a href="・・・">・・・キーワード・・・</a> ===============>( 無視 )
>> ・・・・・・・・・・・・
>> キーワード ===========>( <a href="・・・">キーワード</a>に変換 )
>> ・・・・・・・・・・・・
>> <img src="・・・" alt="・・キーワード・・" /> =============>( 無視 )
>> ・・・・・・・・・・・・
>> </body>
>> </html>
>>
>> ※・・・は、テキストを表しています。
>> ※「キーワード」は検索対象の文字列を表しています。
>>
>> 前回、似たような質問をしたのですが、質問内容が悪かったみたいで、
>> 流れてしまったようです。あれから試行錯誤したのですが、
>> どうしても思いつかなくて。。
>> どうか宜しくお願い致しますm( _ _ )m
>>
>> 江頭
>> _______________________________________________
>> PHP-users mailing list  PHP-users @ php.gr.jp
>> http://ml.php.gr.jp/mailman/listinfo/php-users
>> PHP初心者のためのページ - 質問する前にはこちらをお読みください
>> http://www.php.gr.jp/php/novice.php3
>>
>>     
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>
>   

-- 
☆■▽〜☆■▽〜☆■▽〜☆■▽〜☆■▽〜

  江 頭  竜 二

  〒840-0123 福岡市城南区長尾3-9-5
   TEL    090-2586-8452
   Email  ryu-ring.woo @ cap.ocn.ne.jp

☆■▽〜☆■▽〜☆■▽〜☆■▽〜☆■▽〜



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