[ID CC-CC2021] GREP к слову

brium

Участник
Топикстартер
Сообщения
84
Реакции
11
Всем здоровья.

Есть вопрос.
Например, имеется текст в котором слово "робот" нужно выделить другим стилем.
GREP вида (?i)робот работает. Но стиль применяется и к слову "роботизированный".
Как заставить GREP искать только конкретное слово?

Спасибо.
 

veretragna

γνώσις
Сообщения
578
Реакции
200
(?i)\bробот\b
\b обозначает границу слова.
 
  • Спасибо
Реакции: brium

andrejK

R.I.P.
Сообщения
10 300
Реакции
5 218
таки надо тс почитать хоть что-нить. о греп.
 
  • Спасибо
Реакции: brium

brium

Участник
Топикстартер
Сообщения
84
Реакции
11
Понял.
А \< и \> можно использовать?
 

veretragna

γνώσις
Сообщения
578
Реакции
200
У меня этот сайт не открывается, не могу прокомментировать
 
  • Спасибо
Реакции: brium

brium

Участник
Топикстартер
Сообщения
84
Реакции
11
Скопировал текст:

Задача №2. Поиск слова и всех его форм. Например, для задания оформления полужирным. Решим эту задачу на примере какого-то конкретного слова, например, “пример”.

Решение:
в строке поиска задать: “\<(?i)приме(р|ры|ров|ре|ра)\>”
в строке замены ничего не задавать или ввести в неё “$0” (означает найденный текст);
в опциях замены указать оформление полужирным.

Объяснение.

Во-первых, нужно вычислить все формы этого слова. В нашем случае это будут: “пример”, “примеры”, “примеров”, “примера”, “примеру”, “примере” (кроме “например”, “примерный” и пр. – это уже другие слова).

На этот раз нам нужно задать альтернативные варианты не для символов, а для слов. Такая возможность в шаблонах предусмотрена и реализуется путём перечисления через символ “|” (вертикальная черта). То есть строка поиска должна содержать: “пример|примеры|примеров|примере|примера”

Однако такой поиск игнорирует слова с заглавной буквы! Чтобы решить эту проблему нужно в строку поиска ввести метасимвол “(?i)”, который заставит при поиске игнорировать регистр. И теперь строка поиска выглядит так: “(?i)пример|примеры|примеров|примере|примера”. Не беспокойтесь, при выполнении замены регистр будет сохранён.

Но, увы, ещё одна проблема – система находит эти слова внутри других слов («например», «примерный» и пр.), а нам это не нужно! Выход – надо искать слово целиком. Для этого следует обозначить границы слова в строке поиска – начало слова обозначается метасимволами “\<”, а конец – “\>”. И теперь строка поиска выглядит так:
“(?i)\<пример|примеры|примеров|примере|примера\>”, или так:
“\<(?i)пример|примеры|примеров|примере|примера\>”

Это уже готовое решение, но его можно записать значительно проще! Обратите внимание, что при перечислении форм меняется только часть слова. Чтобы отделить её от неизменной части используем возможность группировки символов, для чего альтернативные варианты укажем в круглых скобках. Таким образом, вместо “пример|примеры|примеров|примере|примера” можно написать: “приме(р|ры|ров|ре|ра)” или “пример|пример(ы|ов|е|а)”

И теперь строка поиска выглядит, например, так: “\<(?i)приме(р|ры|ров|ре|ра)\>”
 
  • Спасибо
Реакции: blacksolg

andrejK

R.I.P.
Сообщения
10 300
Реакции
5 218
и чо у вас не работает с "роботом"? в таком примере?
 

andrejK

R.I.P.
Сообщения
10 300
Реакции
5 218
я тут выкладывал в ресурсах. полные коды греп. как минимум этот файл надо смотреть.

и почитать BookAboutGREP
 
  • Спасибо
Реакции: brium

brium

Участник
Топикстартер
Сообщения
84
Реакции
11
У меня все работает и с (?i)\<робот\>, и с (?i)\bробот\b
Просто интересно в чем разница.
 

andrejK

R.I.P.
Сообщения
10 300
Реакции
5 218
а нет её) таки надо мануалы читать?

1574096304156.png
 
Последнее редактирование:
  • Спасибо
Реакции: blacksolg и brium

brium

Участник
Топикстартер
Сообщения
84
Реакции
11
Ok. Спасибо большое.
 

lev

Модератор
20 лет на форуме
Сообщения
2 145
Реакции
2 071
\< начало слова
\> конец слова
\b граница слова
\b\s\b найдёт пробел между словами
\<\s\> ничего не найдёт, т.к. должен искать слово состоящее из пробела
\>\S*\< ловит дефисы, тире, слеши, запятые, скобки и т.п. между словами с отсутствием пробелов
\b\S*\b ловит ерунду
Затрудняюсь сходу придумать хороший пример, где разница между \<, \> и \b реально может пригодиться.
 
Последнее редактирование:

andrejK

R.I.P.
Сообщения
10 300
Реакции
5 218