我尝试了很多东西,但是每当符合条件连续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]"
匹配的表达式的任何想法吗?
答案 0 :(得分:1)
我不确定你的目标是什么(你还没有说清楚)
但是这会匹配并捕获youtube网址,确保您只匹配[ame=
和[/ame]
之间的每个单个实例
/\[ame=["'](.*?)["'](.*?)\/ame\]/i
这是一个有效的例子,还有一个很棒的沙盒:http://regex101.com/r/jR4lK2
答案 1 :(得分:1)
问题在于使用.+
- 它们是“贪婪的”,这意味着它们会消耗尽可能多的输入并仍然匹配。
将它们更改为不情愿的量词:.+?
,在第一场比赛结束时不会跳过,以便在最后一场比赛时与结束相匹配。