2013-12-14 47 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

相关问题