Regex PCRE:验证字符串以匹配第一组字符串而不是最后一组

时间:2013-12-14 06:03:41

标签: regex pcre regex-negation regex-lookarounds regex-greedy

我尝试了很多东西,但是每当符合条件连续2次时,我就会坚持我的正则表达式。在这种情况下,它只是将其视为一个表达而不是2。

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

E.g。

  

[AME = “http://www.youtube.com/watch?v=brfr5CD2qqY”] [B] [COLOR =黄色] http://www.youtube.com/watch?v=brfrx5D2qqY [/ COLOR ] [/ B] [/ AME] [/ U]   [B] [COLOR =黄色]或[/颜色] [/ B] [B] [颜色=黄色] B [/颜色] [/ B]   [AME = “http://www.youtube.com/watch?v=M9ak3rKIBAU”] [B] [COLOR =黄色] http://www.youtube.com/watch?v=M9a3arKIBAU [/ COLOR] [/ B] [/ AME]   [B] [COLOR =黄色]或[/颜色] [/ B] [B] [颜色=黄色] C [/颜色] [/ B]   [AME = “http://www.youtube.com/watch?v=7vh--3pyq5U”] [COLOR =黄色] http://www.youtube.com/watch?v=7vh--3pyq5U [/ COLOR ] [/ AME]

在这种情况下,这个正则表达式不是匹配所有3个选项,而是将其作为一个。

有关如何创建与第一个"[/ame]"匹配的表达式的任何想法吗?

2 个答案:

答案 0 :(得分:1)

我不确定你的目标是什么(你还没有说清楚)

但是这会匹配并捕获youtube网址,确保您只匹配[ame=[/ame]之间的每个单个实例

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

这是一个有效的例子,还有一个很棒的沙盒:http://regex101.com/r/jR4lK2

答案 1 :(得分:1)

问题在于使用.+ - 它们是“贪婪的”,这意味着它们会消耗尽可能多的输入并仍然匹配。

将它们更改为不情愿的量词:.+?,在第一场比赛结束时不会跳过,以便在最后一场比赛时与结束相匹配。