我有一个 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]