Описание: Как заменить слово с окончанием? |
Поиск в теме | Версия для печати |
Alone |
Отправлено: 18 Февраля, 2007 - 01:16:53
|
Super Member
Покинул форум
Сообщений всего: 2393
Дата рег-ции: Дек. 2004
Карма 8
|
К примеру есть такой код:
CODE:
$pattern = array( '#струя#');
$replace = array( '<a href=http://tvoyweb.ru>струя</a>' );
$text = preg_replace($pattern, $replace, $text);
Он строго меняет "струя" на "струя" (превращая в ссылку).
Проблема в том, что все слова, включающие в себя слово "струя" (например: струящийся, струящиеся, стрящаяся...) превраящаются в ссылку не полностью.
То есть так:
струящийся
струящиеся
струящаяся
Как сделать так, чтобы эта функция работала в отношении полностью всего целого слова по введённому началу и чтобы в ссылку подставлялось слово которое полное (с окончанием)?
По идее работает такой вариант:
CODE:
$pattern = array( '#струя*[А-я]#ie');
$replace = array( '<a href=http://tvoyweb.ru>струя</a>' );
$text = preg_replace($pattern, $replace, $text);
Но при этом варианте например слово "струящийся" превращается в ссылку из слова струя, а надо чтобы в ссылку из слова струящийся
На примерах видел что-то типа этого:
CODE:
$pattern = array( '#струя*[А-я]#ie');
$replace = array( '<a href=http://tvoyweb.ru>$1</a>' );
$text = preg_replace($pattern, $replace, $text);
Но точно не пойму как сделать...
Вот такая головоломка (Отредактировано автором: 18 Февраля, 2007 - 01:19:53) |
|
|
Леголегс |
Отправлено: 18 Февраля, 2007 - 07:19:55
|
JS-маньяк
Покинул форум
Сообщений всего: 2109
Дата рег-ции: Июль 2004
Откуда: Липецк
Карма 17
|
Alone
Что-то ты совсем ничего не понял как я поглажу. Правильный вариант примерно таков:
CODE:$pattern = array( '#струя[а-я]*#i');
$replace = array( '<a href=http://tvoyweb.ru>$0</a>' );
$text = preg_replace($pattern, $replace, $text);
Поясняю: звёздочка ставится после элемента, который может повторяться. Она ставится после я-а т.к. имеется ввиду произвольное количество букв из этого диапазона. Если ставить звёздочку после скобки, то будут совпадать только слова типа струяа струяаструяб струяаструябструял, т.е. струя, одна буква и так сколько угодно раз. Скобочки, помимо объединяющего действия (как в арифметике), запоминают часть совпавшего слова в $1,$2 и т.д. В $0 всегда весь совпавший текст (вообще $0 может и не быть, зависит от реализации, не помню точно что там в PHP, могу ошибиться, тогда дорисуешь скобки и заюзаешь $1). "i"после решётки как раз и означает нечувствительность к регистру. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (1): [1] |
Сейчас эту тему просматривают: 4 (гостей: 4, зарегистрированных: 0, скрытых: 0) |
« PHP/Perl » |
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
|
|
|