我尝试了很多方法,但每当连续两次满足标准时,我都会使用regex。在这种情况下,它只是将其视为一个表达式,而不是2。
[ame=[^.]+(.+)youtube.(.+)v=([^]&"]+)[]'"&](.+)[/ame]
例如
[姓名="http://www.youtube.com/watch?v=brfr5CD2qqY"][B][COLOR=yellow]http://www.youtube.com/watch?v=brfrx5D2qqY[/COLOR][/B][/ame][/U][B] [颜色=黄色]或[/COLOR][/B][COLOR=yellow]B[/COLOR][/B][姓名="http://www.youtube.com/watch?v=M9ak3rKIBAU"][B][COLOR=yellow]http://www.youtube.com/watch?v=M9a3arKIBAU[/COLOR][/B][/ame][B] [COLOR=yellow]或[/COLOR][/B][COLOR=ye黄]C[/COLOR][/B][姓名="http://www.youtube.com/watch?v=7vh--3pyq5U"][颜色=黄色]http://www.youtube.com/watch?v=7vh--3pyq5U[/COLOR][/ame]
在这种情况下,这个正则表达式将不匹配所有3个选项,而是将其视为一个选项。
有什么想法可以制作一个表示匹配第一个"[/ame]"
的表达式吗?
问题在于.+
的使用——它们是"贪婪的",这意味着它们将消耗尽可能多的输入,并且仍然匹配。
将它们更改为不情愿的量词:.+?
,它不会跳过第一场比赛的末尾来匹配最后一场比赛的结尾。
我不确定你的目标是什么(你还没有明确表示)
但这将为您匹配并捕获youtube URL,确保您只匹配[ame=
和[/ame]
之间的每个实例
/[ame=["'](.*?)["'](.*?)/ame]/i
下面是一个工作示例,以及一个可以在其中玩的很棒的沙盒:http://regex101.com/r/jR4lK2