Reputation: 3345
I have a little problem with some preg_replace functions in PHP.
First I have $message = preg_replace("/\[img\](.*?)\[\/img\]/is", '<img src="$1" alt="" />', $message);
for replacing [img]http://example.com/img.png[/img] with an image. But after that I also have a preg_replace which replaces URLs:
$message = preg_replace("/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/", '<a href="$1">title[$1]</a>', $message);
Is it possible to prevent that the URL within <img src=''
is also replaces with a link? Like putting the URL replace function before the img preg_replace and changing the pattern that it won't change URLs which are within BB-Code brackets?
Thanks for answers!
Upvotes: 1
Views: 529
Reputation: 11889
UPDATE: Read update below.
Sure. Use negative lookbehind to check what is behind.
The syntax of it is similar to this:
(?x)
# Match abc if there is no ' or " behind
(?<!['"]) abc
For more details see perlre.
UPDATE:
It seems that it doesn't really work. The trick literally means no '
or "
behind, so regexp actually sees something like this (where matched string is in <>
.
"http://<example.com/img>.png"
Instead of using this trick, you should read Ignore html tags in preg_replace instead. Sometimes regexp is not solution and that's one of those cases.
Upvotes: 1