我有一个perl正则表达式来添加youtube视频链接到视频标记。YouTube视频链接可以在锚中,也可以在没有锚的情况下。我使用(.*?)检查了任何值的锚点。但它表现得很贪婪。下面是我正在使用的正则表达式。
$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;请帮助使它不贪婪。
输入数据示例:
<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>我期望的输出如下:
<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的视频链接。
[video]https://www.youtube.com/watch?v=9gTw2EDkaDQ[/video]发布于 2013-07-29 15:21:33
您真的要匹配>字符吗?我打赌你不会..。所以不要使用.*,这会解决你的贪婪问题。请改用[^>]*。它保证在命中第一个>时立即停止(即使没有附加到?上),因为>不匹配。
https://stackoverflow.com/questions/17917285
复制相似问题