Здравствуйте! Подскажите, есть текст: Код (Text): $text = "Яркий чехол для iPhone 4/4S из силикона будет долго и надежно защищать Ваш смартфон от ударов, царапин, потертостей, пыли и остальных внешних факторов. Формы чехла в точности совпадают с габаритами iPhone 4/4s. Характеристики: яркий, оригинальный чехол, удобно лежит в руке, есть все необходимые вырезы под боковые кнопки, гарнитуру, камеру, не скользит, плотно прилегает к телефону, легко одевается и снимается"; есть слова: Код (Text): $tags = "iPhone,оригинальный,гарнитуру,телефону,снимается"; Вопрос: как слова с переменной $tags заменить найти в тексте и заменить на ссылки в виде: Код (Text): <a href="http://site.ru/tags/iPhone/">iPhone</a> <a href="http://site.ru/tags/оригинальный/">оригинальный</a> <a href="http://site.ru/tags/гарнитуру/">гарнитуру</a> <a href="http://site.ru/tags/телефону/">телефону</a> <a href="http://site.ru/tags/снимается/">снимается</a>
К сожалению я не силен ни в первом случае ни во втором, если не трудно напишите пожалуйста регулярное выражение которое будет делать такую замену
Код (PHP): <?php $text = "Яркий чехол для iPhone 4/4S из силикона будет долго и надежно защищать Ваш смартфон от ударов, царапин, потертостей, пыли и остальных внешних факторов. Формы чехла в точности совпадают с габаритами iPhone 4/4s. Характеристики: яркий, оригинальный чехол, удобно лежит в руке, есть все необходимые вырезы под боковые кнопки, гарнитуру, камеру, не скользит, плотно прилегает к телефону, легко одевается и снимается"; $tags = "iPhone,оригинальный,гарнитуру,телефону,снимается"; $data = explode(',', $tags); $patterns = array("/{$data[0]}/", "/{$data[1]}/", "/{$data[2]}/", "/{$data[3]}/", "/{$data[4]}/") ; $replacements = array('[url="http://site.ru/tags/iPhone/"]iPhone[/url]', '[url="http://site.ru/tags/оригинальный/"]оригинальный[/url]', '[url="http://site.ru/tags/гарнитуру/"]гарнитуру[/url]', '[url="http://site.ru/tags/телефону/"]телефону[/url]', '[url="http://site.ru/tags/снимается/"]снимается[/url]'); $result = preg_replace($patterns, $replacements, $text);
уууу...... $result = preg_replace("#(".str_replace(',', '|', $tags).")#i", '<a href="http://site.ru/tags/$1/">$1</a>', $text);
в варианте smitt'а при изменении списка тегов или адресов - нужно будет и реплейсменты менять и следить за кол-вом элементов и все такое. мой просто заменяет все запятые в списке тегов на пайпы, что дает реплейсу шаблон "или", а замена происходит подстановкой найденного слова в ссылку и ее текст. в одной строке контролируем теги, в другой строке - шаблон замены. удачи.
а как можно остановить скрипт, допустим менять на ссылки не 5 слов, а только 3? Добавлено спустя 2 минуты 16 секунд: $arr=explode(", ",$str); //берем первые 4 запятые $arr=array_slice($arr,0,4); //превращаем в строку $imagemetakeyimages=implode(", ",$arr); подставил этот скрипт до и получилось регулировать кол-во, спасибо всем Добавлено спустя 11 минут 59 секунд: извините, все равно, если допустим в тексте два слова "ремонт", то оба заменяются на ссылки, как можно сделать чтобы замена происходила только одного слова?
пробую preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] ) добавить лимит 3, вроде теперь меняет только 3 слова, но опять же если встречается два раза слово допустим ремонт, то меняет оба, и еще заметил что в ссылке есть пробел <a href="http://site.ru/tags/?ремонт/">ремонт</a> отметил его знаком вопроса, помогите плиз
недостаточно просто знать инструмент, нужно уметь его применять. с этим у вас проблема. первоначальная задача решалась, напомню, минимум двумя способами - одной строкой с preg_replace (успешно) или несколькими строками с explode. и тут у вас возникает затык, потому что вы не понимаете как можно совмещать инструменты. то есть писать программу, алгоритм. Код (Text): $tmp = explode(',', $tags); foreach( $tmp as $tag ) { $text = preg_replace("#(".$tag.")#i", '<a href="http://site.ru/tags/$1/">$1</a>', $text, 1); } в следующий раз прошу обозначать уровень своих знаний соответствующим форумом. PS. про пробел понял ничего.
хорошо, следующий раз буду писать в раздел новички, сделал как вы написали, вроде все получилось, ну вот вылезла еще одна проблема, теперь если есть слово ремонтируем, то пол слова РЕМОНтируем заменяет на ссылку, а остальная часть слова неактивна, как это можно исправить?
я конечно понимаю что скрипт ищет определенную часть слова и заменяет его на ссылку, но сделать так чтобы заменяло целое слово а не его часть (например: ремонтируем), или вообще его не затрагивало не понимаю, сдаюсь
а почему вы выбрали именно регулярное выражение? вы решили сделать сразу круто не имея базиса. не слова оно ищет, а последовательность символов согласно шаблону.
для меня это неправильный ответ. так халявщики обычно говорят. правильный ответ: я стремлюсь использовать правильные инструменты для решения своих задач, однако у меня мало опыта самостоятельного освоения материала. Код (Text): $text = preg_replace("#\b({$tag})\b#iu", '<a href="http://site.ru/tags/$1/">$1</a>', $text, 1); удачи. ЗЫ. обычно человек, который стремиться что-то сделать и чему-то научится - выкладывает свои наработки, описывает свою логику и возникшую проблему. таким сложно отказать в помощи. конечно, если человек за пол года так ничему и не научился - его запросы будут вызывать диарею и тоску по бесцельно потраченному времени. не хочешь учиться - не надо, другие новички ждут внимания, и может быть от них отдачи больше будет. а вот за такое "как сделать? ок, а теперь нужно вот так! а теперь у меня такая проблема" - обычно деньги платят.
я пытаюсь разобраться но у меня пока плохо получается поэтому просил помощи здесь, а халявщиком я никогда не был и не буду, если бы вы сразу сказали что дело заключается в деньгах, я бы заплатил, скиньте кошелек в ЛС, скажите сколько я заплачу
да не в деньгах дело, вы не поняли. я с радостью помогаю людям, которые пытаются разобраться. лучшая благодарность - если вы поймете материал. но бывают случаи, когда человеку не нужно тратить время на изучения материала, а нужен конкретный результат - тогда это заказывается за деньги.
сделал так: Код (Text): $text = "Яркий чехол для iPhone 4/4S из силикона будет долго и надежно защищать Ваш смартфон от ударов, царапин, потертостей, пыли и остальных внешних факторов. Формы чехла в точности совпадают с габаритами iPhone 4/4s. Характеристики: яркий, оригинальный чехол, удобно лежит в руке, есть все необходимые вырезы под боковые кнопки, гарнитуру, камеру, не скользит, плотно прилегает к телефону, легко одевается и снимается, ремонтируем телефоны"; $tags = "iPhone,оригинальный,гарнитуру,телефону,снимается,ремонт"; $tmp = explode(',', $tags); foreach( $tmp as $tag ) { $text = preg_replace("#\b({$tag})\b#iu", '<a href="http://site.ru/tags/$1/">$1</a>', $text, 1); } echo $text; теперь вообще заменяет только слово iPhone
Если параметров для замены не много не вижу ничего страшного... Я показал простой пример в котором разберется даже новичек, писать все в 1 строку... тут же не конкурс кто напишет короче Радует твой оптимизм, молодец, так держать!