$row['post'] = preg_replace( "#(\040|>)(www\.[\w\-]+\.[\w\-.\~]+(?:/[^ \"\<]*)?)#is" , "\\1<a href='http://\\2'>\\2</a>" , $row['post'] );
Есть проблема: регулярка срабатывает и внутри гиперссылок. В результате код
<a href="http://site.ru/">www.other.com</a>предвращается регуляркой в гиперссылку не туда...
Возникла мысль добавить проверку на наличие закрывающего тега </a>, но не могу составить условие.
Гуглил, с символом "не" какая-то засада: он есть, это "^", но работает только внутри квадратных скобок.
Пробовал вывернуться паттерном
#(\040|>)(www\.[\w\-]+\.[\w\-.\~]+(?:/[^ \"\<]*)?)[^(</a>)]#
- ни фига...Что-то я завяз, никаких идей...
Спустя 52 минуты, 33 секунды (24.02.2010 - 23:00) John_761 написал(а):
А если воспользоваться функцией preg_split() ?
она работает как explode(), только параметром служит регулярка
И получится массив без гиперссылок, правда выходит больше лишних действий
она работает как explode(), только параметром служит регулярка
И получится массив без гиперссылок, правда выходит больше лишних действий

Спустя 13 минут, 41 секунда (24.02.2010 - 23:14) FatCat написал(а):
Хочу освоить регулярки.
Поиски/замены неплохо умею делать и без регулярок посредством substr(), strpos() и stristr(), и тут могу ими сделать. Вопрос не в том, как сделать замену, а как сделать замену регуляркой...
Поиски/замены неплохо умею делать и без регулярок посредством substr(), strpos() и stristr(), и тут могу ими сделать. Вопрос не в том, как сделать замену, а как сделать замену регуляркой...
Спустя 28 минут, 2 секунды (24.02.2010 - 23:42) DedMorozzz написал(а):
а разве не так ^(<\/a>)
Спустя 27 минут, 32 секунды (25.02.2010 - 00:09) TakoY написал(а):
^ это значит "все кроме"
здесь помойму нужно использовать
(?!шаблон) Негативный просмотр вперёд (с отрицанием)
(?<!шаблон) Негативный просмотр назад (с отрицанием)
меня этот вопрос тоже интересует
здесь помойму нужно использовать
(?!шаблон) Негативный просмотр вперёд (с отрицанием)
(?<!шаблон) Негативный просмотр назад (с отрицанием)
меня этот вопрос тоже интересует
Спустя 13 минут, 54 секунды (25.02.2010 - 00:23) FatCat написал(а):
(?!<\/a>) и (?!</a>) не срабатывают - внутри гиперлинка продолжает заменять.
Почему-то срабатывает вот такое:
(\040|>) - что это вообще значит?
Почему-то срабатывает вот такое:
"#(\040|>)(www\.[\w\-]+\.[\w\-.\~]+(?:/[^ \"\<]*)?)(\040|>)#is"
(\040|>) - что это вообще значит?
Спустя 16 часов, 58 минут, 19 секунд (25.02.2010 - 17:21) FatCat написал(а):
Разобрался.
Не идеально, но приемлемо: заменяет только при условии концевого пробела.
$row['post'] = preg_replace( "#(\040|>)(www\.[\w\-]+\.[\w\-.\~]+(?:/[^ \"\<]*)?)\040#is" , "\\1<a href='http://\\2'>\\3 " , $row['post'] );
Не идеально, но приемлемо: заменяет только при условии концевого пробела.
_____________
Бесплатному сыру в дырки не заглядывают...