Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.08.2013
Сообщений: 24
1

Выделение повторяющихся слов жирным шрифтом. Не работает, если нет пробела перед первым словом

20.11.2014, 10:33. Показов 930. Ответов 1
Метки нет (Все метки)

Здравствуйте, суть задания : есть строка например this this test test
нужно выделить повторяющиеся this и test жирным.
PHP
1
2
3
4
echo $string;
echo "<br>";
$text1=preg_replace('/((\w+)\s*)\1/Ui','$1<strong>$1</strong>',$string ,100);
print $text1;
Это выражение работает только если перед первым словом стоит пробел, тогда все хорошо, но если пробела нет ,то он выделяет только 1 слово this а test не видит. Помогите пожалуйста исправить)
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2014, 10:33
Ответы с готовыми решениями:

Выделение отдельных слов в RichTextBox жирным шрифтом
Здравствуйте, уважаемые форумчане. Есть такая задача: в поле RichTextBox нужно вывести перечень...

Выделение текста жирным шрифтом
Добрый день! Есть диапазон ячеек. В некоторых из них записан текст через точку. Необходимо...

Выделение слова в форуме жирным шрифтом
Всем привет! Меня заинтересовал такой вопрос: Возьмём к примеру этот форум, и вот такой текст:...

MonthCalendar - выделение нужной даты жирным шрифтом
Такая проблема,решил сделать календарь. Посмотрел в интернете,есть метод AddBoldedDate,который...

1
597 / 464 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
20.11.2014, 22:42 2
PHP
1
echo preg_replace('~(\b\w+\b)(\s*)\1~', '$1$2<strong>$1</strong>', 'this this test test');
если нужно выбрать только повторяющиеся слова, разделенные пробелами. если же и строка
Код
this test this test
должна заменяться на
Код
this test <strong>this</strong> <strong>test</strong>
, то самый простой вариант, который приходит в голову -- развернуть строку, применить к ней такую замену:
PHP
1
preg_replace('~(\b\w+\b)(?=.*?\1)~', '>gnorts/<$1>gnorts<', $s);
и развернуть обратно. т.е. полный код:
PHP
1
2
3
$s=strrev("this test this test");
$s=preg_replace('~(\b\w+\b)(?=.*?\1)~', '>gnorts/<$1>gnorts<', $s);
echo strrev($s);

Не по теме:

трюк с разворотом нужен изза того, что на ретроспективные проверки накладываются ограничения в виде константной длины, что в данном случае недопустимо. То решение, которое привел я, можно использовать в рабочем проекте, хоть и с натяжкой (сложность O(n2)), поэтому нужно дополнительно следить за длиной входной строки, чтобы не вылетело. Если же вы решаете задачу для себя, ради интереса, и хотите именно одной регуляркой это сделать, то надо подумать...

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2014, 22:42

Помощь в написании контрольных, курсовых и дипломных работ здесь.

MonthCalendar - выделение выбранной даты жирным шрифтом
Добрый вечер форумчане не могу разобраться с элементом MonthCalendar а точней как реализовать...

Выделение отдельного куска текста жирным шрифтом в label
Можно ли как-нибудь выделить жирным шрифтом кусок текста, допустим, в том же label'е? Когда меняю...

Посчитать количество слов в массиве и добавить это количество перед первым словом
количество слов в массиве посчитать и добавить это количество перед первым словом

Выделение в тексте жирным шрифтом прописными буквами 16 с мигающим фоном каждого четного символа в фигурных скобках
нужно написать этот макрос на выделение в тексте жирным шрифтом прописными буквами 16 с мигающим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.