Замена при помощи регулярного выражения

pashin

Новичок
Нужно в тексте заменять отдельные слова и словосочетания на ссылки.
Пытаюсь сделать при помощи preg_replace
Например нахожу в тексте слово ВАЗ2101 и заменяю его ссылкой ВАЗ2101, но если в тексте есть слово ВАЗ21013, то после замены получается ВАЗ21013
Как запретить делать замену в таких случаях?
И как быть в случаях, когда после искомого слова идут знаки препинания и производить замену слова на ссылку надо (ВАЗ2101, белый)?
 

Macintosh

Новичок
Ну так делай ограничение на количество цифр, на 4 цифры одну проверку на 5 другую и т.д. Ну что-то типа:

^ВАЗ[0-9]{4}$

В такой проверке ВАЗ21011 уже не пройдет!

Или может я не так вас понял?

Наш долг не говорить этому человеку как правильно делать.
Почему? ))
 

pashin

Новичок
Ну так делай ограничение на количество цифр, на 4 цифры одну проверку на 5 другую и т.д. Ну что-то типа:

^ВАЗ[0-9]{4}$

В такой проверке ВАЗ21011 уже не пройдет!

Или может я не так вас понял?
)
Добрый вечер, вы меня немного не так поняли.
Букв и цифр в искомом слове может быть сколько угодно и на каждый случай делать отдельное выражение нет смысла.
Чтобы обойти мою проблему я пробовал указывать, что до и после искомого слова должен быть какой либо символ (не буква или цифра, а пробел или точка или запятая), но тогда регулярное выражение не срабатывает если искомое слово находится в начале или конце строки.
 

Macintosh

Новичок
Сложно так понять, что именно нужно, когда не понимаешь всей задачи целиком ) Если там только ВАЗ то нужно отталкиваться от этого ^ВАЗ[0-9]{4}$, просто додумать до конца, это я так за пару секунд набросал, просто для примера. Если там конечно сотни и тысячи машин, тогда это не вариант, нужно как-то по другому, но в любом случае нужно либо делать ограничения по цифрам, либо составлять массив возможных вариантов, и его перебирать, или еще как-то.
 

pashin

Новичок
Там не только ВАЗ, машин в базе много.

Если делаю так:
$text=preg_replace("/(".$name.")([^\dA-Za-zа-яА-Я-]{1})/i","<a href=\"/".urlencode($name)."/\">\\1</a>\\2",$text,1))
то регулярное выражение не срабатывает, если искомое слово стоит в конце строки.

Если делаю так:
$text=preg_replace("/(".$name.")/i","<a href=\"/".urlencode($name)."/\">\\1</a>",$text,1))
То замена происходит и в ВАЗ2101 и в ВАЗ21013, где замену делать не нужно
 

pashin

Новичок
Попробовал сделать так:
$text=preg_replace("/(".$name.")((?:[^\dA-Za-zа-яА-Я-_]{1}*){0,1})/i","<a href=\"/".urlencode($name)."/\">\\1</a>\\2",$text,1)
не работает
 
Сверху