2013-04-14 38 views
0

我使用下面的正則表達式來獲取值從[URL=http://www.google.com]Google[/URL]正則表達式模式只有在有一個[url]標籤

$pattern = '/\[\s*URL(.+?)?\s*\](.+?)\[\s*\/URL\s*\]/i'; 

它工作正常,但前提是隻有一個[URL]...[/URL]工作。如果有一個具有多串它[URL]....[/URL]給出了錯誤的價值觀

例如,對於下面的字符串

$string = '[URL=http://www.google.com]Google[/URL] another website [URL]www.youtube.com[/URL]'; 

它輸出的第一場比賽作爲]http://www.freshupnow.com[/URL和離開其餘URL標記。 我試了很多在我的正則表達式模式中找到問題,但失敗了。任何人有想法?

+5

什麼是PHP代碼? – mario

+2

你可能沒有做全球搜索,但需要查看源代碼才能確定。另外你的例子似乎有一個不同於輸入的URL輸出。我想一個複製/粘貼錯誤。 – Dave

+0

嘗試像這樣的'$ string ='[URL = http://www.google.com] Google [/ URL]另一個網站[URL] www.youtube.com [/ URL]'; preg_match_all('/ \ [URL =(?。*?)\]。*?\ [\/URL \] /是',$ string,$ m); print_r($ m [「url」]);' – HamZa

回答

1

您的URL搜索按預期工作,即如果您列出的/ URL不正確,或者您的匹配格式與您給我們的格式不同。

$pattern = '/\[\s*URL(.+?)?\s*\](.+?)\[\s*\/URL\s*\]/i'; 

會得到

([URL=http://www.google.com]Google[/URL] another website [URL) 
(]www.freshupnow.com) 
([/URL]) 

爲正則表達式以上。

如果你想讓它沒有跳出系統你只需稍微改變你的正則表達式來

$pattern = '/\[\s*URL([^\]]+?)?\s*\](.+?)\[\s*\/URL\s*\]/i'; 

這將阻止它跳出來的時候它的圖案表達的[]。

+0

哦,那太好了。非常感謝。 –

+1

爲了清晰起見,您可以在[regex101](http://regex101.com)上添加一個在線演示 –