Вероятно, лучше всего:
- Анализировать ваш ввод через анализатор HTML / DOM
- Использовать DOM / XPath для поиска текстовых узлов
- Извлечь URL, используяregex
Пример 1 и 2 можно найти здесь: https://stackoverflow.com/a/6399988/406712
Тогда для вашего регулярного выражения рассмотрите "отрицательный взгляд назад", чтобы исключить ссылку, которая начинается с "[ссылка= ":
Использование
preg_match_all('/(?<!\[link=)\bhttps?:\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[A-Z0-9+&@#\/%=~_|]/i', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
# Matched text = $result[0][$i];
}
Регулярное выражение
(?<!\[link=)\bhttps?://[-A-Z0-9+&@#/%?=~_|!:,.;]*[A-Z0-9+&@#/%=~_|]
Визуализация

PS.если вы собираетесь изменять ввод HTML, используйте для этого методы DOM.