2011-01-11 5 views
0

私は文字列を検索し、それらの文字列のキーワードをリンクで置き換える関数を作成しました。私は使用していますphp preg_replace need help

preg_replace('/\b(?<!=")(?<!=\')(?<!=)(?<!=&quot;)(?<!>)(?<!&gt;)' . $keyword . '(?!</a)(?!&lt;/a)\b', $newString, $row); 

期待どおり動作しています。唯一の問題は、誰かが持っていた場合は、この

<a href="www.domain.tdl/keyword.html">Luxury Automobile sales</a> 

Automobileのようなリンクは、この例では、当社の$keywordているということです。

それはあなたが私の欲求不満を理解することができます

<a href="www.domain.tdl/keyword.html">Luxury <a href="www.domain.tdl/keywords.html">Automobile</a> Sales</a> 

のように見えることになります。 正規表現に自信がないので、ここに誰かが解決策を知っているかどうか尋ねると思いました。

ありがとうございます!

+0

は私が集まることを見てから、HTML ... – knittl

答えて

3

はどのようにDOMDocument?

$html = '<a href="www.domain.tdl/keyword.html">Luxury Automobile sales</a>'; 
$dom = new DomDocument; 
$dom->loadHTML($html); 
$nodes = $dom->getElementsByTagName('a'); 
foreach ($nodes as $node) 
{ 
    $node->nodeValue = str_replace('Automobile', 'Cars', $node->nodeValue); 
    echo simplexml_import_dom($node)->asXML(); 
} 

のような適切なHTMLパーサについての要素は属性を取得する問題ではありませんあまりにも

foreach ($nodes as $node) 
{ 
    $attr = $node->getAttributeNode('href'); 
    $attr->value = str_replace('Automobile', 'keyword', $attr->value); 
    echo simplexml_import_dom($node)->asXML(); 
} 
+0

のための正規表現を使用していませんそれぞれのリンクを見て、その中の特定のテキストを置き換えます。これは私が達成しようとしていることではありません。私はリンクでキーワードのインスタンスをラップしようとしています。問題は、キーワードが他の単語でラップされ、それらの単語がリンクでラップされている場合(元の例のように)、リンクでキーワードをラップするので、私はダブルリンクになります。 – Jack

+0

@Jack - あなたは 'Luxury Automobile sales'を意味しますか? – ajreal

+0

基本的には 'preg_replace'を使って' Automobile'を 'Automobile'にしています。それは正常に動作しますが、すでに 'Luxury Automobile sales'のようなリンクがある場合、私の 'preg_replace'はそれを' Luxury Automobile sales ' – Jack