2017-07-06 97 views
2

因此,我在WordPress环境中的youtube链接周围添加了[embed] [/ embed],因为如果你在后端的内容输入使用不同的字段而不是normale内容编辑器,牛逼自动执行此操作(即使你apply_filter the_content)正则表达式前面没有href =“

所以,我发现这个正则表达式这对我的应用程序运行完美。

$firstalinea = preg_replace('/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i', '[embed]https://www.youtube.com/watch?v=$2[/embed]', $firstalinea); 

除了一件事如果有人放置一个链接到YouTube-。视频,而不是想嵌入它,它也取代,然后链接不再工作。

<a href="https://youtu.be/xxxxxx">Link</a> 

那么,如何使正则表达式不工作,如果前面有href =“?

谢谢!

+0

做一个测试用的preg_match,看看它前面有一个href – clearshot66

+0

会怎么做呢? – TonyPartyHardy

+0

我也得到了这个与正则表达式测试器一起工作的东西,但是会抛出php7错误: '(?<!href = \“)(http:\/\/| https:\/\ /)(?: www \ ?)youtu(be.com \ /观看\ v = | .BE \ /)([A-ZA-Z0-9 \ -_] +)([A-ZA-Z0-9 \/\ * \ - ('):未知的修饰符'('') – TonyPartyHardy

回答

1

解决它:

$re = '/(?<!href=\")(http:\/\/|https:\/\/)(?:www\.)?youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i'; 
$firstalinea = preg_replace($re, '[embed]https://www.youtube.com/watch?v=$3[/embed]', $firstalinea);