Regex игнорировать URL уже в HTML-тегах

У меня проблемы с моим Regex

Я сделал собственный BBcode для своего веб-сайта, однако я также хочу, чтобы URL-адреса также анализировались.

Я использую preg_replace, и это шаблон, используемый для идентификации URLS:

/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/is 

Это работает отлично, однако, если URL-адрес находится в блоке [img] [/ img], вышеупомянутый шаблон также отображает его и создает такой результат:

 //[img]http://url.com/toimg.jeg[/img] will produce this result: <img src="<a href="http://url.com/toimg.jeg" target="_blank">/> //When it should produce: <img src="http://url.com/toimg.jeg"/> 

Я попытался использовать это:

 /([^"][\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/][^"])/is 

Без везения.

Любая помощь будет оценена.

Изменить: для решения. См. Второй комментарий к ответу stema.

    Попробуй это

     (?<!href=")(\b[\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/]) 

    См. Здесь, в Regexr

    Чтобы сделать его более общим, вы можете упростить свой lookbehind, чтобы проверить только на «=» "

     (?<!=")(\b[\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/]) 

    См. Его в Regexr

    (?<!href=") является отрицательным утверждением lookbehind, оно гарантирует, что перед вашим шаблоном не будет« href = ».

    \b – это граница слова, которая привязывает начало вашей ссылки к изменению от несловного символа слова. без этого lookbehind будет бесполезным, и это будет соответствовать «ttp: // …» on.