TonyPartyHardy
TonyPartyHardy

Reputation: 63

Regex not preceded by href="

So I am adding [embed][/embed] around youtube links in a WordPress environment, since if you use different fields for content input in the backend than the normale content editor, it won't do this automatically (even if you apply_filter the_content).

So, I found this regex which works perfect for my application:

$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);

Except for one thing. If someone places a link to a YouTube-video instead of wanting to embed it, it also replaces and then the link does not work anymore.

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

So, how to make the regex NOT work, if preceded by href=" ?

Thanks!

Upvotes: 2

Views: 79

Answers (1)

TonyPartyHardy
TonyPartyHardy

Reputation: 63

Solved it:

$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);

Upvotes: 1

Related Questions