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



我尝试了很多方法,但每当连续两次满足标准时,我都会使用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

最新更新