2013-12-14 48 views
0

我嘗試了很多事情,但我堅持我的正則表達式,每當滿足條件連續2次。在這種情況下,它只將其視爲一種表達而不是2.正則表達式PCRE:驗證字符串匹配的第一組字符串,而不是最後一個

\[ame\=[^\.]+(.+)youtube\.(.+)v\=([^\]\&\"]+)[\]\'\"\&](.+)\[\/ame\] 

例如,

[ame =「http://www.youtube.com/watch?v=brfr5CD2qqY」] [B] [COLOR = yellow] http://www.youtube.com/watch?v=brfrx5D2qqY [/ color] [/ B] [/ color] [/ U] [B] [COLOR = yellow]或[/ COLOR] [/ B] [B] [COLOR = yellow] B [/ COLOR] [/ B] ] [ame =「http://www.youtube.com/watch?v=M9ak3rKIBAU」] [B] [COLOR = yellow] http://www.youtube.com/watch?v=M9a3arKIBAU [/ COLOR] [/ B] [/ B] [B] [COLOR = yellow] or [/ COLOR] [/ B] [B] [COLOR = yellow] C [/ COLOR] [/ B] [ame =「http: //www.youtube.com/watch?v=7vh--3pyq5U"][COLOR=yellow]http://www.youtube.com/watch?v=7vh--3pyq5U[/COLOR][/ame]

In t帽子的情況下,這個正則表達式將不會匹配所有3個選項,它將它作爲一個整體。

任何想法如何使一個表達,會說匹配第一個"[/ame]"

+1

歡迎來到SO!總是儘量簡化你的例子,使它們小而易於理解。還要讓它更清楚你得到的和你實際得到的。在這種情況下,如果你把每個'+'非貪婪的都當成'+?'它不能解決你的問題嗎? –

回答

1

的問題是使用.+ - 它們是「貪婪的」,這意味着它們將盡可能多地消費並且仍然匹配。

將它們更改爲不願意量詞:.+?,它將不會在第一次匹配結束時跳過,以匹配最後匹配的結尾。

+0

謝謝,我認爲你的意思是期間而不是逗號,但我認爲我有它的工作。問題在於,即使是不情願的量詞,我在末尾使用了s修飾符,它仍然使它匹配整個字符串,而不是在第一個ame停止。 – Yevgen

1

我不知道你的目標是什麼(你沒有說的很清楚還)

但是,這將匹配並捕獲了YouTube網址給你,以確保您只[ame=之間的每個單一實例和匹配[/ame]

/\[ame=["'](.*?)["'](.*?)\/ame\]/i

這裏的工作示例,和一個偉大的沙盒中玩耍:http://regex101.com/r/jR4lK2

+0

謝謝,使用我的原始示例,除了使用「。*?」。你的例子包括很多非youtube網址,它對我來說並不好。此外,很好的正則表達式網站進行測試! – Yevgen

+0

是的,不確定你想要捕捉或不捕捉,最大的部分絕對是非貪婪的。* ?. Regex101真棒!祝你好運 – brandonscript

+0

其實,試試這個:'\ [ame = [''](。*?youtu \。?be。*?)[''](。*?)\/ame \]'僅匹配youtube和youtu.be – brandonscript

相關問題