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

okuyama @ workgroup.jp okuyama @ workgroup.jp
2007年 2月 13日 (火) 17:06:06 JST


おく@Workgroupです。

美しくは無いですが、タグを退避しておいて、後で戻すという
方法ではだめでしょうか?

preg_match_all("/(<a href[^>]+>.+<\/a>)/i", $text, $atags);
$text = preg_replace("/(<a href[^>]+>.+<\/a>)/i", "#atags#", $text);
preg_match_all("/(<[^>]+>)/i", $text, $tags);
$text = preg_replace("/(<[^>]+>)/", "#tags#", $text);

$pattern = '/([^<]*)(hoge)([^>]*)/' ;
$replace = '$1<a href="./hit.html">hit</a>$3' ;
$text = preg_replace ($pattern, $replace, $text);

while (list($k,$val) = each($atags)) {
    $text = preg_replace("/#atags#/", $val[0], $text, 1);
}
while (list($k,$val) = each($tags)) {
    $text = preg_replace("/#tags#/", $val[0], $text, 1);
}

echo $text;

動作の確認はしていませんし、複数行に渡る場合などは考慮していないですので、
調整が必要かとは思います。

.    ・ .  +    : ゜.   ‥     ゜.  .     
 ‥     ゜.  .    .    ・.    ・ .  +      
   /  +    ゜.      ・ .  +    :          
★               from: Atsuji Okuyama       
  彡彡ミ         mail:  okuyama @ workgroup.jp
  )∂∂b        tel :  03-5579-9337        
 ( ー  人__     msn : okuyama_vingt @ msn.com
   ̄/)/    |                               
    |` ̄    "\                             
                                            



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