- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Нужно найти заданный фрагмент текста и поместить его в заданные теги.
К примеру, есть текст: "Нужно найти заданный фрагмент". Искомый фрагмент "Задан". Теги <b> и </b>. Есть варианты:
<?php
$text="Нужно найти заданный фрагмент";
$search="Задан";
$result1=eregi_replace($search, "<b>\\0</b>",$text);
$result2=preg_replace("/".$search."/i", "<b>\\0</b>", $text);
?>
Результат в обоих случаях: "Нужно найти <b>задан</b>ный фрагмент".
А как лучше сделать, чтоб выделялось слово целиком? То есть, чтоб получалось так: "Нужно найти <b>заданный</b> фрагмент"? С учетом того, что слово может заканчиваться не только пробелом, но и знаком припинания, переносом строки и прочим.
Кто подскажет изящное решение?
А вы попробуйте тут в соседней темке ;)
$result2=preg_replace("/".$search.".*\s/i", "<b>\\0</b>", $text);
$result2=preg_replace("/".$search.".*\s/i", "<b>\\0</b>", $text);
этот вариант ищет до пробела (при чем, только в конце). А слово-то может заканчиваться точкой, или запятой. Вот, что получится:
<?php
$text="Нужно, найти, заданный, фрагмент";
$search="дан";
$result2=preg_replace("/".$search.".*\s/i", "<b>\\0</b>", $text);
?>
Результат в обоих случаях: "Нужно, найти, за<b>данный,</b> фрагмент".
То же не совсем то, что нужно :(
Supervisork, а откуда такое огромное желание все воткнуть в регулярки? почему не сделать все по очереди:
1. разбиваем строку по словам (по всем разделителям.,- и т.д.)
2. Ищим вхождение в каждом слове.
3. Если нашли вхождение, делаем замену - слово на <b>слово</b> в исходной строке
preg_replace("'\b(\w*)?".$search."(\w*)?\b'i", "<b>\\0</b>", $text);
/ru/forum/comment/5443771
Все подсказанные варианты никуда не годятся. В лучшем случае, они ищут по пробел. А как же знаки припинания? Вот, что использую я сейчас:
"/[^\.,\?:!'\s\x34\x93]*".$highlight."[^\.,\?:!'\s\x34\x93]*/i"
но реально, там нужно бы еще пол миллиона символов указать, которые не входят в слово. Например, знак процента, решетку и т. д. Есть ли более лаконичный вариант?
Supervisork, знаков припинания всего то штук 20, перечислите их да и все ...
то есть, только прямым перечислением?
ну вы можете перечислить русские и ингл буквы, вы же в любом случае знаете какие у вас будут ...
<?php
$text="Нужно найти заданный фрагмент";
$search="Дан";
$result2=preg_replace("#[а-яa-z\-]*".preg_quote($search)."[а-яa-z\-]*#ui", "<b>\\0</b>", $text);
?>
нечто такое да и все)