2011-12-30 25 views
0

我需要在現場替換我的文本中的名稱。但文本中的名稱只需要替換,而不是標籤中。如何更換隻有一次,沒有標籤?

例如:

<img src="" title="Justin Bieber" /> bla bla bla bla Justin Bieber bla bla bla Justin Bieber bla bla bla bla 

要這樣:

<img src="" title="Justin Bieber" /> bla bla bla bla <a href="http://en.wikipedia.org/wiki/Justin_Bieber">Justin Bieber</a> bla bla bla Justin Bieber bla bla bla bla 

我找到了答案:

$text = '<img src="" title="Justin Bieber" /> bla bla bla bla Justin Bieber bla bla bla Justin Bieber bla bla bla bla'; 

$text = preg_replace('/Justin Bieber(?![^<>]*+>)/i', '<a href="http://en.wikipedia.org/wiki/Justin_Bieber">Justin Bieber</a>', $text, 1); 

只有一個,沒有圖像標記。

回答

1

如果您解析任何複雜的HTML,請使用HTML解析器。在這個網站上搜索「HTML Parser」,你會得到很多很多的結果。

如果您正在處理小的受控字符串,請使用正則表達式。

這裏是一個非常簡單的例子:http://regexr.com?2vjqc

它只是檢查,看看是否「賈斯汀·比伯」是引號內(因爲它應該是一個HTML標籤內)。有十幾種方法可能會失敗(空格,缺少引號,文檔中其他地方的引號,格式不正確的標籤等)

當然,這個正則表達式可以改進,但如果您無法控制源,我強烈建議使用HTML解析器而不是正則表達式。

-2
$text = '<img src="" title="Justin Bieber" /> bla bla bla bla Justin Bieber bla bla bla Justin Bieber bla bla bla bla'; 
$replacement = '<a href="http://en.wikipedia.org/wiki/Justin_Bieber">Justin Bieber</a>'; 
echo preg_replace('/\s+Justin Bieber/i', $replacement, $text, 1); 
+1

-1。不要使用REGEX解析HTML。它會中斷。如果他有''? – 2011-12-30 09:47:33

+0

@Truth Yep你的權利。如果HTML格式良好,則可以使用SimpleXML來迭代DOM獲取文本,替換並重新創建html。 – dotoree 2011-12-30 10:11:52