2012-09-05 156 views
2

好吧,我可能不會去這個正確的方式,但在這裏不用..PHP preg_replace函數符號

我有這樣的字符串,它需要一個鏈接,並提取標籤之間的文字...

$string = $item; 
$pattern = '/\<a([^>]*)\>([^<]*)\<\/a\>/i'; 
$replacement = '$2'; 
$message = preg_replace($pattern, $replacement, $string); 

這個字符串中有幾個項目有&符號(在文本部分,而不是標籤部分),但大多數不包含。我試圖找出一種方法,將&符號合併到當前模式中,或者在$message上執行另一個preg_replace以刪除標籤被刪除後的&符號。

謝謝!

+0

如果你正在考慮多個正則表達式,你要麼是過於複雜的東西,要麼你是[Cthulu]的奴隸(http://stackoverflow.com/questions/1732348/regex-match-open-tags- except-xhtml-self-contained-tags/1732454#1732454)...真的:省去很多麻煩和_PARSE_ html。正如你自己所說的:你不會以正確的方式去做,所以修補你的方式 –

回答

2

是否要在&符後刪除所有內容?然後它是

'/\<a([^>]*)\>([^<&]*)[^<]*\<\/a\>/i'; 

否則,你需要第二個操作。

順便說一句:您的正則表達式還將匹配其他標記,從<a開始,如<author><audio>標記。

+0

謝謝,這工作很好! <一個問題並不是什麼大問題,因爲我正在替換一個只包含鏈接的數組,但是感謝您的支持! –

6

總是有$message = str_replace('&', '', $message);

順便說一句,如果你試圖剝去HTML輸入標籤,也就是strip_tags

例如,如果你輸入

$text = '<a href="google.com">Text</a>'; 

然後strip_tags($text)會產生Text

+1

感謝您的答案,哪些工作!我選擇了其他答案,因爲它有點乾淨。但下次我會記住'strip_tags($ text)'!謝謝! –