2008-10-27 85 views
7

我的後端有一個wysiwyg編輯器,它正在跳出我寫的第一個正則表達式。這是在PHP4中,使用preg_replace()。我正在捕獲URI和鏈接的文本。正則表達式 - 匹配所有可選屬性的錨點

@<a\shref=\"http[s]?://([^\"]*)\"[]>(.*)<\/a>@siU 

客戶希望所有外部鏈接在新窗口中打開,所以這是我用的是找到所有(希望)外部鏈接,但離開內部,頁錨鏈接表達等

我意識到如果用戶在鏈接上選擇粗體,wysiwyg編輯器也會添加style="font-weight: bold"。我最近纔開始學習正則表達式,所以我不確定如何解決這個問題。

我該怎麼做?

回答

7

這應該沒事匹配它:

/<a\s+([^>]*)href="https?:\/\/([^"]*)"(.*?)>(.*?)<\/a>/ 

這裏的有用的東西是懶惰的比賽。 *?這意味着它只會匹配絕對需要的數量,而不是常規匹配,這是貪婪的。

爲了演示,用這樣的文字:

a b c d a b c d

這些正則表達式會有不同的結果:

/a.*c/ selects: "a b c d a b c" 
/a.*?c/ selects: "a b c"