2014-04-09 46 views
0

我想要做一些簡單的但我失敗: 我想在PHP中使用preg_replace使關鍵字成爲一個鏈接,但我不想插入它在標題中。preg替換如果單詞不在標題內

我實際的preg_replace:

$data_replace = '<a href="'.$link.'">$1</a>'; 
$word_to_replace = "keyword"; 
$data_source = "<h1>keyword</h1><p>keyword</p>" 
$pattern = "/\\b(?!<h[0-6]*\>)(.*?)(" . trim($word_to_replace) . ")(.*?)(?!<\/h[0-6]>)\\b/"; 
preg_replace($pattern, $data_replace, $data_source, 1); 

而且我想:

<h1>keyword</h1><p><a href="http://...">keyword</a></p> 

現在,我的輸出提供:

<h1><a href="http://...">keyword</a></h1><p>keyword</p> 

如果我錯了,我正則表達式模式? 謝謝!

+0

你[不應該使用正則表達式來解析HTML](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454),改爲使用[DOM解析器](http://www.php.net/manual/en/class.domdocument.php)。 – Sam

+0

我知道,但我想知道我的知識答案:) –

回答

1

試試這個:

<?php 

$data_replace = '<a href="'.$link.'">$1</a>'; 
$words = ["keyword","foo"]; 
$out = "<h1>keyword</h1><p>keyword</p>"; 
foreach ($words as $word){ 
    $pattern = "/(<[^h].*?>)($word)(<\/)/"; 
    $out = preg_replace($pattern, "\\1<a href=\"#\">$word</a>\\3", $out); 
} 
var_dump($out); 

產地:

dejavu:~ jancha$ php -q aa.php 
string(46) "<h1>keyword</h1><p><a href="#">keyword</a></p>" 

附: 這增強了多個關鍵字。

+0

而且我知道你可以在php中使用['1','2']。非常感謝 ! –