gpt4 book ai didi

Youtube URL 的 PHP 正则表达式否定

转载 作者:可可西里 更新时间:2023-10-31 23:37:08 24 4
gpt4 key购买 nike

假设我在数据库中有如下所示的 HTML:

Hello world!

<a href="https://www.youtube.com/watch?v=m7t75u72vd">ABC</a>

Blah blah blah...

https://www.youtube.com/watch?v=df82vnx07s

Blah blah blah...
<p>https://www.youtube.com/watch?v=nvs70fh17f3fg</p>

现在我想使用 PHP 正则表达式来获取第二个和第三个 URL,但忽略第一个。

我目前的正则表达式方程是:

\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)

它工作得很好,但我不知道如何让它排除/否定第一种类型的 URL,它以 href="

开头

请帮忙,谢谢!

最佳答案

您可以使用“负向回顾”正则表达式功能来完成您所追求的。我通过添加 ((?<!href=[\'"])http) 修改了正则表达式的开头实现一个。希望对您有所帮助!

$regex    = '/((?<!href=[\'"])http)[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)/';
$useCases = [
1 => '<a href="https://www.youtube.com/watch?v=m7t75u72vd">ABC</a>',
2 => "<a href='https://www.youtube.com/watch?v=m7t75u72vd'>ABC</a>",
3 => 'https://www.youtube.com/watch?v=df82vnx07s',
4 => '<p>https://www.youtube.com/watch?v=nvs70fh17f3fg</p>'
];
foreach ($useCases as $index => $useCase) {
$matches = [];
preg_match($regex, $useCase, $matches);
if ($matches) {
echo 'The regex was matched in usecase #' . $index . PHP_EOL;
}
}
// Echoes:
// The regex was matched in usecase #3
// The regex was matched in usecase #4

关于Youtube URL 的 PHP 正则表达式否定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42033930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com