Я использую регулярное выражение, чтобы найти любые URL и связать их соответственно.Однако я не хочу связывать какие-либо URL-адреса, которые уже связаны, поэтому я использую lookbehind, чтобы увидеть, есть ли перед URL-адресом href.Это терпит неудачу, потому что квантификаторы переменной длины не разрешены в lookahead и lookbehind для PHP.
Вот регулярное выражение для совпадения:
/\b(?<!href\s*=\s*[\'\"])((?:http:\/\/|www\.)\S*?)(?=\s|$)/i
Как лучше всего решить эту проблему?
РЕДАКТИРОВАТЬ:
Мне еще предстоит проверить это, но я думаю, что хитрость в том, чтобы сделать это в одном регулярном выражении, заключается в использовании условных выражений в регулярном выражении, которое поддерживается PCRE.Это выглядело бы примерно так:
/(href\s*=\s*[\'\"])?(?(1)^|)((?:http:\/\/|www\.)\w[\w\d\.\/]*)(?=\s|$)/i
Ключевым моментом является то, что, если href захвачен, совпадение сразу же выбрасывается из-за условного (?(1)^|)
, которое гарантированно не будет совпадать.Вероятно, что-то не так с этим.Я проверю это завтра.