首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl正则表达式在使用时变得贪婪(.*?)使用锚点

Perl正则表达式在使用时变得贪婪(.*?)使用锚点
EN

Stack Overflow用户
提问于 2013-07-29 14:27:08
回答 1查看 151关注 0票数 0

我有一个perl正则表达式来添加youtube视频链接到视频标记。YouTube视频链接可以在锚中,也可以在没有锚的情况下。我使用(.*?)检查了任何值的锚点。但它表现得很贪婪。下面是我正在使用的正则表达式。

代码语言:javascript
复制
$text =~ s#(^|\s|\>)(?:<a(.*?)\>)?((http|https)://(?:www.)?(?:youtu.be/|youtube.com(?:/embed/|/v/|/watch\?v=|/watch\?[a-z_=]+&(amp;)?v=))([\w-]{11}))[\?&\w;\=\+\-\.]*(\<\/a\>)?#$1\[video\]$3\[\/video\]#isg;

请帮助使它不贪婪。

输入数据示例:

代码语言:javascript
复制
<a rel="nofollow" href="https://www.facebook.com/photo.php?v=639296402756602" target="_blank">https://www.facebook.com/photo.php?v=639296402756602</a>

<a rel="nofollow" href="https://www.youtube.com/watch?v=9gTw2EDkaDQ" target="_blank">https://www.youtube.com/watch?v=9gTw2EDkaDQ</a>

我期望的输出如下:

代码语言:javascript
复制
<a rel="nofollow" href="https://www.facebook.com/photo.php?v=639296402756602" target="_blank">https://www.facebook.com/photo.php?v=639296402756602</a>

[video]https://www.youtube.com/watch?v=9gTw2EDkaDQ[/video]

但它只返回youtube链接。它忽略了facebook的视频链接。

代码语言:javascript
复制
[video]https://www.youtube.com/watch?v=9gTw2EDkaDQ[/video]
EN

回答 1

Stack Overflow用户

发布于 2013-07-29 15:21:33

您真的要匹配>字符吗?我打赌你不会..。所以不要使用.*,这会解决你的贪婪问题。请改用[^>]*。它保证在命中第一个>时立即停止(即使没有附加到?上),因为>不匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17917285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档