2011-09-12 22 views
0

我需要一個正則表達式,它只有在不存在[url] BBcode的情況下才會查找並替換字符串中的單詞/短語。使用正則表達式查找不包含BBcode的字符串

$string = "Word [url='http://domain.com']Word test[/url]"; 

正則表達式不應該對「單詞測試」做任何事情,只是第一次出現「單詞」。

編輯:更具體地說,這是一個論壇軟件的插件,監控藝術家提及的消息。如果出現這種情況,藝術家的名字將被替換爲關於該藝術家的線索的URL,除非它還不是URL的一部分(無論是在鏈接本身還是在desc中)。經過第二次考慮後,如果它在任何非純粹標記(b,i,u,顏色,列表等)的標籤中使用,都不應觸發它。所以一個簡單的方法來定義什麼標籤可以將被取代將是輝煌!

在此先感謝!

回答

0
$inputStr = "Coldplay [URL='localhost/threads/coldplay-paradise.32/']Coldplay - \"Paradise\"[/URL] Coldplay"; 

function replace($matches) { 
    if(isset($matches[2]) && $matches[2]) 
     return "[url='coldplay']".$matches[2]."[/url]"; 
    return $matches[0]; 
} 

$regex = '/(\[.*?\].*?\[\/.*?\])?(Coldplay)?(.+?)?/si'; 
$outputStr = preg_replace_callback($regex, 'replace', $inputStr); 
echo $outputStr; 

結果:

[url='coldplay']Coldplay[/url][URL='localhost/threads/coldplay-paradise.32/']Coldplay - "Paradise"[/URL] [url='coldplay']Coldplay[/url] 
+0

對不起,但我無法得到那個工作。使用以下字符串「Coldplay [URL ='http://localhost/threads/coldplay-paradise.32/']酷玩樂隊 - 」天堂「[/ URL] 酷玩樂隊」,結果是「[url ='http://Coldplay的 '] Coldplay的[/ URL] [URL =的' http:// Coldplay的'] [/ URL] ...「。更具體地說,這是一個論壇軟件的插件,用於監控提及藝術家的信息。如果出現這種情況,藝術家的名字將被替換爲關於該藝術家的線索的URL,除非它還不是網址的一部分(無論是在網址本身還是網址 – MartinAronsen

+0

@Martin我不知道您做錯了什麼,我使用了你的數據,並得到了正確的結果,見上面 – nobody

+0

因爲這將尋找多個藝術家,這個問題出現在幾個不同的藝術家在消息中提到的地方,想想我會嘗試一種不同的方法使用strpos(),substr()和substr_replace()。 – MartinAronsen

相關問題