Регулярные выражения в word 2016

Обновлено: 07.07.2024

осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов.

По сути это строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»),

состоящая из символов и метасимволов и задающая правило поиска.

Т.е. регулярным выражением задается шаблон, по которому происходит поиск в документе.

Например, нужно найти только пятизначное число, значение которого заранее неизвестно, либо найти время, которое задано форматом ЧЧ:ММ (ЧЧ – часы: 00, 01, 02, … 23; ММ – минуты: 00, 01, 02, …).

Регулярные выражения позволяют искать последовательности символов, которые имеют определенный формат, но не имеют заранее известного значения.

Как включить регулярные выражения в MS-word?

Для того чтобы MS-WORD воспринимал регулярные выражения нужно поставить отметку «Постановочные знаки». После чего в полях «Найти» и «Заменить на» служебные символы регулярных выражений будут восприниматься как подстановочные знаки, а не как символы, которые нужно найти.

Как подсказку можно использовать список символов, который находится в выпадающем списке «Специальный».

Краткое введение ?и* Два самых основных подстановочных знака это «?» и «*». «?» используется для представления одного любого символа, а «*» для представления любого количества любых символов.

S?t должно найти “Set”,” Sat”, “Sit”, и т.д.

S*t должно найти слова: “Secret”, “Serpent”, “Sailing boat”.

@ Указывает, что предыдущий символ должен встретиться один или более раз. Sel@ найдет Sell, Selll и т.дю Указывают на начало и конец слов. Например, S*t найдет “Serpent” и “Sailing boat”, но НЕ “Sailing boats”(т.к. в boats еще есть s, которая является окончанием слова) [] В таких скобках перечисляются символы, которые могут стоять на данной позиции на позиции.

[asd] означает, что на данной позиции может стоять один из символов. Например, S[aeo]x найдет слова Sax, Sex, Sox.

К данным скобкам можно добавить символ @(повторение символа один или более раз).

Например, если написать S[aeo]@x, то также найдем слова Saex, Soex, Saox(слова смысла не имеют и используются только для примера).

Можно не перечислять все символы, а задать их интервалом.

[A-Z] означает, любой заглавный символ английского алфавита.

2 – любая цифра.

[A-z] – любая заглавная или строчная буква английского алфавита.

[0-9A-z] – любая буква английского алфавита или цифра.

Экранирование символов— замена в тексте управляющих символов на соответствующие текстовые подстановки.(Википедия).

Если нам нужно найти символ «?», то просто так вписать мы его не можем, т.к. он воспримется как «любой символ», такая же ситуация будит и с «*», «@», «», «» и т.д.

Для того чтобы нам найти в тексте символ, который является служебным в регулярных выражениях нужно перед этим символом поставить знак экранирования «\»

Например, S[aeo\?]x - найдет Sax, S?x, Sox и тд.

Этот символ нужно использовать перед символами, если их нужно найти в тексте – () [] - @ ?!*\.

[!] ! используется как НЕ, и относится ко всем скобкам. [!o] означает любой символ кроме «o». [!AZ] – любой символ кроме заглавных букв.

<> Указывает на количество повторений предыдущего символа(такой смысл как и у “@”) – символ должен повториться n раз.

A должно найти AAA.

[asd] должно найти: aa, as, ad, sd, da,sa,ds и т.д.

– символ должен повторится от n до m раз.

D – символ D может повторяться от 3 до 6 раз – символ может повторяться от n раз и больше.

() Эти скобки никак не влияют на поиск. Они используются для группирования результатов поиска. Например, нам нужно найти текст «ббб ааа» и эти два слова поменять местами. Для этого мы в найти пишем (ббб) (ааа), в данном варианте скобки являются служебними символами и не ищутся в тексте. Если в тексте будит найден результат, то мы можем обратиться к каждой скобке, написав «\2 \1» в строке замены мы поменяем местами слова(\1 – это первая скобка \2 – вторая и т.д. ).

^ Используется для обозначения непечатаемых символов. Например, ^13 обозначает конец строки(если не стоит отметка «Подстановочные знаки», то этот символ обозначат ^p). Если отмечено «Подстановочные знаки», то в строке поиска нужно ставить ^13, но в строку «заменить на» нужно писать ^p.

Таблицы служебных знаков В Microsoft Word существуют два типа специальных знаков — специальные символы и подстановочные знаки. Те и другие удобно вводить в строки поиска и замены используя кнопку Special (Специальный) в диалоге поиска и замены.

Специальными символами называют символы, которых нет на клавиатуре и/или которые невозможно непосредственно вписать в строку поиска или замены. Например: принудительный обрыв строки, мягкий перенос, неразрывный пробел и т. п.

Если в диалоге поиска и замены задействована опция Подстановочные знаки, то становится возможным формировать сложные условия поиска. Для этого используются подстановочные знаки. С их помощью можно задавать диапазоны символов и выражения, отвечающие ряду условий.

Некоторые символы и знаки можно использовать только в строке поиска, некоторые — только в строке замены. Возможность использования других зависит от того, задействована или нет опция Подстановочные знаки.

Ниже приведен полный список символов и знаков.

А еще ниже — примеры их использования.

СТРОКА П О И С К А

Специальные символы, которые можно использовать только в том случае, если опция Use wildcards (Подстановочные знаки) не задействована(т.е. отметка «Постановочные знаки не стоит»).

Подстановочные знаки, которые можно использовать только в том случае, если опция Use wildcards (Подстановочные знаки) задействована(т.е. стоит отметка «Постановочные знаки»).

СТРОКА З АМ Е Н Ы

Специальные символы, использование которых не зависит от опции Use wildcards (Подстановочные знаки).

Спец. символы Что обозначают

Подстановочные знаки, которые можно использовать только в том случае, если опция Use wildcards (Подстановочные знаки) задействована.

Примеры Опция Use wildcards (Подстановочные знаки) должна быть задействована в диалоге поиска и замены. Это условие должно соблюдаться для всех приведенных ниже примеров.

ПРИМЕРЫ ПОИСКА

В квадратных скобках указан диапазон Диапазон в квадратных скобках определяет все русские знаков от А до Я и Ё (т. е. любая русская строчные буквы.

прописная буква). Знак «@» говорит о том, что число русских строчных букв Знак «»указывает на то, что прописная может быть равным или больше нуля.

буква должна быть в начале слова. Знак «» указывает на конец слова.

ОБ ОПЕРАЦИЯ Х С ВЫР АЖЕ НИЯМИ

Для работы с выражениями задействуйте опцию Use wildcards (Подстановочные знаки).

В строке поиска выражением является все то, что заключено в круглые скобки (которые в этом случае выступают в роли специальный знаков). Выражение может состоять как из конкретных символов, так и содержать подстановочные знаки или специальные символы. Порядок следования выражений определяет их нумерацию.

В строке замены выражения представляются в виде: \n, где n — номер выражения в строке поиска.

ПРОСТОЙ П РИ МЕР, П ОЯСНЯ ЮЩИЙ Р АБОТУ С ВЫР АЖЕНИ ЯМИ

Будем редактировать предложение: Сережа ест грушу.

И ЕЩЕ ДВА ПРИМЕРА

Замена в документе фамилии Иванов на фамилию Петров сразу во всех падежах:

Строка поиска Строка замены Результат поиска и замены

Конечно, такая замена возможна только с фамилиями, у которых одинаковые падежные окончания.

Пример 2 В документе очень много десятичных дробей. Часть дробей набрана через точку, часть — через запятую.

Требуется произвести такую замену, чтобы сделать написание всех дробей единообразным.

Надстройки часто должны действовать на основе текста документа. Функция поиска предоставлена для каждого элемента управления содержимым (включает объекты Body, Paragraph, Range, Table, TableRow, и базовый объект ContentControl). Эта функция принимает строку (или подстановочное выражение), представляющую текст, который вы ищете, а также объект SearchOptions. Она возвращает коллекцию диапазонов, соответствующих искомому тексту.

Параметры поиска

Параметры поиска представляют собой коллекцию логических значений, определяющих способ обработки параметра поиска.

Свойство Описание
ignorePunct Возвращает или задает значение, которое указывает, следует ли пропустить все знаки препинания между словами. Соответствует установленному флажку "Не учитывать знаки препинания" в диалоговом окне "Найти и заменить".
ignoreSpace Возвращает или задает значение, которое указывает, следует ли пропустить все пробелы между словами. Соответствует установленному флажку "Не учитывать пробелы" в диалоговом окне "Найти и заменить".
matchCase Возвращает или задает значение, которое указывает, следует ли выполнять поиск с учетом регистра. Соответствует установленному флажку "Учитывать регистр" в диалоговом окне "Найти и заменить".
matchPrefix Возвращает или задает значение, которое указывает, нужно ли учитывать слова, начинающиеся со строки поиска. Соответствует установленному флажку "Учитывать префикс" в диалоговом окне "Найти и заменить".
matchSuffix Возвращает или задает значение, которое указывает, нужно ли учитывать слова, заканчивающиеся строкой поиска. Соответствует установленному флажку "Учитывать суффикс" в диалоговом окне "Найти и заменить".
matchWholeWord Возвращает или задает значение, которое указывает, следует ли операции искать только целые слова, а не текст, являющийся частью большего слова. Соответствует установленному флажку "Только слово целиком" в диалоговом окне "Найти и заменить".
matchWildcards Возвращает или задает значение, которое указывает, будет ли выполняться поиск с использованием специальных операторов поиска. Соответствует установленному флажку "Подстановочные знаки" в диалоговом окне "Найти и заменить".

Руководство по подстановочным знакам

В таблице ниже приведено руководство по подстановочным знакам поиска в API JavaScript для Word.

Чтобы найти: Подстановочный знак Пример
Любой знак ? "л?с" находит "лес" и "лис".
Любая строка знаков * "к*т" находит "кот" и "компот".
Начало слова < "<(интер)" находит "интересный" и "интермедия", но не "заинтересованный".
Конец слова > "(ель)>" находит "ель" и "портфель", но не "ельник".
Один из указанных знаков [ ] "п[оы]л" находит "пол" и "пыл".
Любой символ из этого диапазона [-] "[б-с]оль" находит "боль" и "соль". Диапазон должен быть указан в алфавитном порядке.
Любой символ, кроме символов из диапазона, указанного в скобках [!э-я] "ко[!а-п]а" находит "кора" и "коса", но не "коза" или "кожа".
Точное количество повторений (n) предыдущего знака или выражения "жареный" находит "жаренный", но не "жареный".
Количество повторений предыдущего знака или выражения не менее n раз "жареный" находит и "жареный" и "жаренный".
Количество повторений предыдущего знака или выражения в диапазоне от n до m 10 находит 10, 100 и 1000.
Одно или несколько повторений предыдущего знака или выражения @ "жарен@ый" находит "жареный" и "жаренный".

Отмена специальных символов

Поиск с использованием подстановочных знаков по сути аналогичен поиску по регулярному выражению. В регулярных выражениях используются специальные знаки, в том числе '[', ']', '(', ')', '', '*', '?', '<', '>', '!' и '@'. Если один из этих знаков входит в состав искомого строкового литерала, его необходимо отменить, чтобы приложение Word знало, что его необходимо рассматривать буквально, а не как часть логики регулярного выражения. Чтобы отменить символ при поиске с помощью пользовательского интерфейса Word, добавьте перед ним символ ''. Чтобы отменить символ в программном коде, заключите его в символы '[]'. Например, выражение '[*]*' ищет все строки, начинающиеся с символа '*', за которым следует любое количество других символов.

У Word есть мощные возможности поиска, которые позволяют искать вам текст, числа, форматы, параграфы, разрывы страниц, использовать подстановочные символы, коды полей и многое другое. Используя подстановочные символы, вы можете искать просто всё что угодно в вашем документе. Поскольку функция поиска совмещена с заменой, то вы можете также выполнять весьма замысловатые преобразования текста.

Прежде чем мы приступим, поясню пару терминов, которые могут быть не совсем понятными для вас.

Регулярное выражение — это условное обозначение критериев, которым должна соответствовать искомая строка. С помощью регулярных выражений можно найти множество строк или слов, соответствующих заданным условиям.

Подстановочные символы (wildcards) — это * (звёздочка), . (точка) и ? (знак вопроса), которые имеют в регулярных выражениях специальное значение. Например, символ * (звёздочка) обозначает любое количество любых символов, а ? (знак вопроса) означает любой один символ.

Давайте начнём знакомство с продвинутыми возможностями поиска в Word!

Как использовать подстановочные символы в продвинутом поиске

В ленте Word переключитесь на вкладку «Главная» и нажмите кнопку «Заменить»:


В окне «Найти и заменить» кликните «Больше >>», чтобы развернуть диалоговое окно и увидеть дополнительные опции. Если вы увидели кнопку «<< Меньше», значит всё прошло удачно.


В раскрывшемся окне для показа опций поиска, включите флажок «Подстановочные знаки».


Обратите внимание, что после того, как вы включили опцию «Подстановочные знаки», Word сразу под полем «Найти:» показывает, что эта опция включена. Также когда выбран флажок «Подстановочные знаки», некоторые опции становятся недоступными для включения, а именно: «Учитывать регистр», «Только слово целиком», «Учитывать префикс», «Учитывать суффикс».


Теперь нажмите кнопку «Специальный» для просмотра списка подстановочных знаков.


В Word доступны следующие подстановочные символы:

Наконец выберите подстановочный символ для вставки в ваши критерии поиска. После выбора подстановочного знака, символ добавляется в строку поиска. Когда запомните значения, вы также можете использовать клавиатуру для ввода символов вместо вставки их путём выбора из списка. Меню «Специальный» работает как справка в случае если вы не помните, какие доступны специальные символы и их значения.

Готовые увидеть как работают подстановочные символы? Давайте ознакомимся с конкретными примерами использования регулярных выражений и подстановочных символов в Word.

Для чего используются подстановочные символы?

В меню «Специальный» содержит много специальных символов, которые вы можете использовать для поиска по документу Word, но на самом деле не все они являются подстановочными символами. Большинство из них нужны для поиска каких-то специфичных и, иногда, скрытых символов Word, таких как пробелы, разного вида тире, разрывы страницы.

Здесь мы заострим внимание в первую очередь на подстановочных знаках, которые означают один или более символов текста или модифицируют поиск на основе другого символа в вашем поиске.

Использование звёздочки для указания любого количества символов

Скорее всего, самым часто используемым подстановочным символом для вас станет звёздочка. Она означает, что вы хотите найти любое количество символов. Например, чтобы найти все слова, начинающиеся с «отм», напечатайте «отм*» в строке поиска и затем кликните кнопку «Найти далее». Наше регулярное выражение означает любое количество букв (* звёздочка), следующих после «отм».


В качестве альтернативы ввода символа звёздочки с клавиатуры, вы можете использовать выбор специального символа из списка подстановочных знаком. Вначале наберите «отм» в строке «Найти». Поставьте галочку «Подстановочные знаки». Затем кликните кнопку «Специальный» и выберите «Любое число символов». После этого нажмите кнопку «Найти далее»:


Word оценивает поиск и показывает вам первое вхождение, которое он найдёт в документе. Продолжайте кликать «Найти далее», чтобы найти все части текста, которые соответствуют вашему поисковому термину.


Вы должны помнить важную вещь: при включении подстановочных знаков, поиск автоматически становится чувствительным к регистру (такова особенность регулярных выражений, частью которых являются подстановочные символы). Поэтому поиск «отм*» и «Отм*» даст различные результаты.

Использование знака вопроса для поиска определённого количества символов

В то время как звёздочка означает любое количество символов, знак вопроса в регулярном выражении означает единичный (один) символ. Например, если «отм*» будет искать строки начинающиеся с «отм» за которыми идёт любое количество символов, то «отм?» будет искать строки, начинающиеся с «отм», за которой идёт только один символ.

Как и звёздочку, знак вопроса можно использовать в любой части слова — в том числе в начале и в середине.

Также можно использовать вместе несколько знаков вопроса вместе, тогда они будут обозначать несколько букв.

Например, регулярное выражение для поиска «о?о?о» оно означает букву «о», за которой идёт любой символ, затем снова идёт буква «о», затем опять любой символ и затем опять буква «о» найдёт следующие слова:

Можно найти слова с четырьмя буквами «о», шаблон «о?о?о?о»:

Или с тремя буквами «а», шаблон «а?а?а»:

Необязательно использовать одинаковые буквы — составляйте выражения под ваши задачи.

Например, чтобы найти слова, в которых первая буква «з», затем идёт любой другой символ, а затем буква «к» и вновь любой символ, шаблон для поиска «з?к?» найдёт:


Использование знака собачка (@) и фигурных скобок (< and>) для поиска вхождений предыдущего символа

Вы можете использовать знак собачка (@) для указания одного или более вхождения предыдущего символа. Например, «ro@t» найдёт все слова, которые начинаются на «ro» и заканчиваются на «t» и которые имеют любое количество букв «o» между этими частями. Поэтому по этим условиям поиска будут найдены слова «rot», «root» и даже «roooooot».

Для большего контроля поиска предыдущих символов, вы можете использовать фигурные скобки, внутри которые укажите точное число вхождений предыдущего символа, который вы хотите найти. Например, поиск «rot» найдёт «root», но не найдёт «rot» или «roooooot».

Также поддерживает синтаксис вида - означает искать количество вхождений символа более n раз; - означает искать количество вхождений символа менее m раз; - означает искать количество вхождений символа более n раз, но менее m раз.

Чтобы показать более практический пример, немного забежим вперёд, следующий поиск использует набор символов (будут рассмотрены в этой статье чуть ниже), в результате, будут найдены все слова, в которых подряд идут четыре согласных буквы:

Использование угловых скобок (< и >) для обозначения начала и конца слова

Это довольно полезно, но эта техника становится более мощной, когда вы комбинируете её с другими подстановочными символами. Например, с помощью «<з. >» вы можете найти все слова, которые начинаются на «з» и состоят ровно из пяти букв.

Вам необязательно использовать обе угловые скобки в паре. Вы можете обозначить просто только начало или конец слова, используя только одну соответствующую скобку. Например «ство>» найдёт слова

Использование квадратных скобок ([ и ]) для поиска определённых символов или диапазонов символов

Вы можете использовать квадратные скобки для указания любых символов или диапазонов символов. Например «[а]» будет искать любые вхождения буквы «а».

В следующем примере, будет искаться строка, которая начинается на «р», затем идёт любая гласная, а затем снова буква «р»: «р[аеиоуэюя]р»

Далее аналогичный пример, но между буквами «р» должно быть две любых гласных: «р[аеиоуэюя]р», будет найдено, к примеру, слово «приоритет».

Вы также можете искать квадратные скобки для поиска диапазонов символов, например «[a-z]» найдёт любую из этих букв в нижнем регистре. Поиск «8» найдёт любую из этих цифр.

Пример р[а-и]р найдёт строку, которая начинается и заканчивается на букву «р» между которыми две любые буквы из указанного диапазона.

Следующий пример довольно сложный, но при этом и довольно интересный:


В начале строки должна стоят любая заглавная буква ([А-Я]) ровно один раз ( ). Затем должны идти маленькие буквы, цифры, пробелы, запятые и тире ([а-я0-9 ,-]) хотя бы один раз и более ( ), в самом конце должна стоять точка (.)

Думаю вы догадались, что это регулярное выражение которое будет искать предложения. Перечислены не все возможные символы, поэтому не будут найдены предложения, содержащие кавычки и некоторые другие символы, а также вопросительные и восклицательные предложения.

То есть вы можете комбинировать подстановочные символы и дополнять их кванторами количества, а затем это всё комбинировать любое количество раз, пока не получите желаемый результат. На самом деле, это довольно сложно — почти как программирование, поскольку требует абстрактного мышления.

Использование скобок для группировки поисковых терминов в последовательности

Вы можете использовать круглые скобки в вашем поиске для группировки последовательностей символов.

Можно использовать довольно простые шаблоны, например «(го) » найдёт строки, в которых «го» встречается три и более раза подряд.

Но настоящую силу эта конструкция покажет при использовании в операциях поиска и замены.

Показанная далее техника называется «обратные ссылки». Начнём с конкретного примера, чтобы было проще понять. Предположим, нам нужно во всём документе поменять местами два слова, допустим, имя и фамилию. К примеру, во всём тексте множество раз упоминается «Милосердов Алексей», а нам нужно, чтобы было «Алексей Милосердов».

Для этого в строке поиска мы вставляем «(Милосердов) (Алексей)», а в строке «Заменить на» пишем «\2 \1».

Скобки не участвуют в поиске, то есть в результате будет искаться фраза «Милосердов Алексей» При этом то, что было найдено в первых скобках, будет присвоено как значение «\1», а то, что было найдено во вторых скобках, станет значением «\2». При этом найденная строка заменится на «Алексей Милосердов».


Можно сделать по-другому, допустим вместо фамилии и имени, я хочу заменить на фамилию и инициалы, тогда в строке поиска я ищу «(Милосердов) (Алексей)», а в строке «Заменить на» пишу «\1 А.В.».


В скобках можно писать не только слова, там могут использоваться подстановочные символы в разных сочетаниях, а также кванторы количества. Когда находится целая фраза, то Word автоматически пронумеровывает эти группы слева направо (это происходит «под капотом» - мы это не видим), поэтому в поле «Заменить на» мы можем использовать эти группы по их номеру, перед которым нужно поставить обратный слэш.

Рассмотрим более жизненный пример. Допустим, у нас по всему документу имеются даты вида 31.12.2019 (то есть в формате день.месяц.год), а мы хотим чтобы все эти даты были в формате 2019.12.31 (то есть год.месяц.день).

Тогда для поиска любых дат составляем регулярное выражение с подстановочными символами:

«8» - это диапазон, обозначающий все цифры, « » - это квантор количества, который говорит, что предыдущий символ должен встречаться ровно два раза. То есть будет искаться строка длиной ровно два символа, состоящая из цифр. Затем идёт точка, затем снова аналогичная строка и точка, и в конце строка из четырёх цифр.

Строка подходит для поиска, но чтобы были созданы обратные ссылки, мы заключаем нужные нам элементы в круглые скобки: «(8).(3).(7)» - она будет работать точно также, как и предыдущая.

Теперь составляем строку «Заменить на». В начале идёт год, то есть третья группа, она обозначается как «\3», затем точка, затем вторая группа, затем опять точка и затем первая группа, получаем «\3.\2.\1».


Используйте обратный слэш (\) если вам нужно искать символы, которые являются подстановочными знаками

А что если вам нужно найти в документе символ, который используется как подстановочный? Например, если вам нужно найти звёздочку? Если просто её вставите, то она сработает как подстановочный знак и будет найдено всё что угодно. Есть два способа искать символы в их буквальном значении.

Первый способ, это снять галочку с опции «Подстановочные знаки» перед выполнением поиска. Но если вы не хотите это делать, вы можете использовать обратный слэш (\) перед этим символом. Например, чтобы найти буквальный знак вопроса при включённых «Подстановочных знаках», введите в поле Поиск «\?».


Заключение

Вы можете делать весьма сложные поиски и замены комбинируя подстановочные символы в ваших поисках в Word, поэтому продолжайте пробовать с ними. После того, как вы действительно разберётесь, какой потенциал несут регулярные выражения, вы сможете увеличить вашу продуктивность. Нам только следует порекомендовать вам не делать большие операции поиска и замены одновременно для всего документа, если у вас нет полной уверенности что ваши подстановочные символы делают именно то, что вы задумали. Также рекомендуется для этого использовать тестовые копии документов.

В каждом разделе этого краткого справочника приводится перечень конкретной категории символов, операторов и конструкций, которые можно использовать для задания регулярных выражений.

Мы также представили эту информацию в двух форматах, чтобы вы могли ее скачать и распечатать для справки:

Escape-знаки

Обратная косая черта (\) в регулярных выражениях указывает, что следующий за ней символ либо является специальным знаком (как показано в следующей таблице), либо должен интерпретироваться буквально. Дополнительные сведения см. в разделе Escape-символы.

Классы символов

Класс символов соответствует какому-либо одному набору символов. Классы символов состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Классы символов.

Привязки

Привязки, или атомарные утверждения нулевой ширины, приводят к успеху или сбою сопоставления, в зависимости от текущей позиции в строке, но не предписывают обработчику перемещаться по строке или обрабатывать символы. Метасимволы, приведенные в следующей таблице, являются привязками. Дополнительные сведения см. в разделе Привязки.

Утверждение Описание Шаблон Число соответствий
^ По умолчанию соответствие должно начинаться в начале строки. В многострочном режиме соответствие должно начинаться в начале линии. ^\d "901" в "901-333-"
$ По умолчанию соответствие должно обнаруживаться в конце строки или перед символом \n в конце строки. В многострочном режиме соответствие должно обнаруживаться до конца линии или перед символом \n в конце линии. -\d$ "-333" в "-901-333"
\A Соответствие должно обнаруживаться в начале строки. \A\d "901" в "901-333-"
\Z Соответствие должно обнаруживаться в конце строки или до символа \n в конце строки. -\d\Z "-333" в "-901-333"
\z Соответствие должно обнаруживаться в конце строки. -\d\z "-333" в "-901-333"
\G Соответствие должно обнаруживаться в той точке, где заканчивается предыдущее соответствие. \G\(\d\) "(1)" , "(3)" , "(5)" в "(1)(3)(5)[7](9)"
\b Соответствие должно обнаруживаться на границе между символом \w (алфавитно-цифровым) и символом \W (не алфавитно-цифровым). \b\w+\s\w+\b "them theme" , "them them" в "them theme them them"
\B Соответствие не должно обнаруживаться на границе \b . \Bend\w*\b "ends" , "ender" в "end sends endure lender"

Конструкции группирования

Конструкции группирования отображают части выражений регулярных выражений и обычно захватывают части строки входной строки. Конструкции группирования состоят из языковых элементов, приведенных в следующей таблице. Для получения дополнительной информации см. Конструкции группирования.

Квантификаторы

Квантор указывает количество вхождений предшествующего элемента (знака, группы или класса знаков), которое должно присутствовать во входной строке, чтобы было зафиксировано соответствие. Кванторы состоят из языковых элементов, приведенных в следующей таблице. Для получения дополнительной информации см. Квантификаторы.

Конструкции обратных ссылок

Конструкция обратных ссылок Описание Шаблон Число соответствий
\ число Обратная ссылка. Соответствует значению нумерованной части выражения. (\w)\1 "ee" в "seek"
\k< имя > Именованная обратная ссылка. Соответствует значению именованного выражения. (?<char>\w)\k<char> "ee" в "seek"

Конструкции чередования

Конструкции изменения модифицируют регулярное выражение, включая сопоставление по принципу "либо-либо". Такие конструкции состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Конструкции чередования.

Конструкция изменения Описание Шаблон Число соответствий
| Соответствует любому элементу, разделенному вертикальной чертой ( | ). th(e|is|at) "the" , "this" в "this is the day."
(?( expression ) yes | no ) Соответствует да в случае соответствия шаблона регулярного выражения, определяемого выражением; в противном случае соответствует дополнительной части нет. Выражение интерпретируется как утверждение нулевой ширины. (?(A)A\d\b|\b\d\b) "A10" , "910" в "A10 C103 910"
(?( name ) yes | no ) Соответствует да в случае соответствия именованной или нумерованной группы захвата имя; в противном случае соответствует дополнительной части нет. (?<quoted>")?(?(quoted).+?"|\S+\s) "Dogs.jpg " , "\"Yiska playing.jpg\"" в "Dogs.jpg \"Yiska playing.jpg\""

Подстановки

Подстановки — это языковые элементы регулярных выражений, которые поддерживаются в шаблонах замены. Для получения дополнительной информации см. Подстановки. Приведенные в следующей таблице метасимволы являются атомарными утверждениями нулевой ширины.

Параметры регулярных выражений

Можно определить параметры, управляющие интерпретацией шаблона регулярного выражения обработчиком регулярных выражений. Многие из этих параметров можно указать в шаблоне регулярного выражения либо в виде одной или нескольких констант RegexOptions. Этот краткий справочник перечисляет только встраиваемые параметры. Дополнительные сведения о встроенных параметрах и параметрах RegexOptions см. в статье Параметры регулярных выражений.

Встроенный параметр можно задать двумя способами:

  • С помощью прочих конструкций (?imnsx-imnsx) , где минус (-) перед параметром или набором параметров отключает эти параметры. Например, (?i-mn) включает сопоставление без учета регистра ( i ), отключает многострочный режим ( m ) и отключает захват неименованных групп ( n ). Параметр применяется к шаблону регулярного выражения от точки, в которой определен параметр, и действует либо до конца шаблона, либо до точки, в которой другая конструкция отменяет параметр.
  • С помощью конструкции группирования (?imnsx-imnsx: часть выражения ) , которая определяет параметры для только для указанной группы.

Параметр Описание Шаблон Число соответствий
i Использовать соответствие без учета регистра. \b(?i)a(?-i)a\w+\b "aardvark" , "aaaAuto" в "aardvark AAAuto aaaAuto Adam breakfast"
m Использовать многострочный режим. ^ и $ соответствуют началу и концу строки (line), а не началу и концу строки (string). Пример см. в подразделе "Многострочный режим" раздела Параметры регулярных выражений.
n Не захватывать неименованные группы. Пример см. в подразделе "Только явные захваты" раздела Параметры регулярных выражений.
s Использовать однострочный режим. Пример см. в подразделе "Однострочный режим" раздела Параметры регулярных выражений.
x Игнорировать знаки пробела в шаблоне регулярного выражения, не преобразованные в escape-последовательность. \b(?x) \d+ \s \w+ "1 aardvark" , "2 cats" в "1 aardvark 2 cats IV centurions"

Прочие конструкции

Всем доброго времени суток. Сегодня хочу рассказать максимум о регулярных выражениях: что они из себя представляют, как их писать, для чего нужны и т.д.

Информации о регулярках много, они разбросаны по разным сайтам и я решил собрать всё, касательно регулярок, в одну статью. Ну что-ж, приступим поскорее к делу :)

Содержание

Что такое регулярка и с чем ее едят?

Где писать регулярки?

Самые простые регулярки

Специальные символы квантификаторов

Lookahead и lookbehind (опережающая и ретроспективная проверки)

Регулярные выражения в разных языках программирования

Что такое регулярка и с чем ее едят?

Где писать регулярки?

Регулярки мы можем писать как на специальных сайтах, так и используя какой-либо язык программирования. Синтаксис (правила написания регулярок) не привязан к какому-то отдельному языку программирования. Поэтому, изучив регулярные выражения, вы сможете пользоваться ими где захотите. Сначала, в рамках изучения, воспользуемся отличным сайтом, а как писать регулярные выражения в различных языках программирования, рассмотрим чуточку позже.

Коротко о том, как пользоваться сайтом. Сверху, в графе Regular Expression вы пишете само регулярное выражение, а под ним, в графе Test String вы пишете строку, которую вы хотите фильтровать. Если были найдены соответствия между регулярным выражением и текстом, в тексте эти соответствия будут помечены синим цветом, вы их сразу увидите, даже не сомневайтесь.

Самые простые регулярки

Перед тем, как писать регулярку, возьмем некоторый текст, чтобы мы не фильтровали пустоту. Допустим, у нас будет строка some text. И допустим мы хотим найти слово text. Для этого в саму регулярку мы должны написать просто слово text и он найдет его.

Пример регулярки

Пример регулярки

Вот и всё, надеюсь вы поняли регулярные выражения, спасибо за внимание.

Шутка конечно, это далеко не всё. Например, мы можем написать одну букву t, и он найдет все буквы t в тексте.


Таким образом вы можете просто указывать какие-то символы, но нам не всегда даются конкретные символы, а нужно написать какой-то шаблон. Сейчас этим и займемся.

Квантификаторы

Понимаю, звучит страшно, но на деле все просто. Сейчас разберемся.

С помощью квантификаторов мы можем указывать сколько раз должен повторяться тот или иной символ (ну или группа символов). Ниже приведу список квантификаторов с пояснением, а дальше попрактикуемся с ними.

- символ повторяется ровно n раз

- символ повторяется в диапазоне от m до n раз

- символ повторяется минимум m раз (от m и более)

Теперь посмотрим на примерах. Допустим у нас есть строка s ss sss ssss. И мы хотим выбрать слово, где буква s повторяется ровно 3 раза. Для этого мы можем написать так: s - то есть пишем символ s, тем самым говоря, что хотим выбрать именно его, и рядом пишем , говоря, что он должен повторяться ровно 3 раза. В результате будет найдено слово sss


Почему же он взял еще ssss? Он взял не совсем его, а лишь его часть, так как в нем тоже есть 3 буквы s подряд. Дело в том, что регулярка не будет учитывать, отдельное это слово или нет. Пробелы тоже идут как символы! Поэтому будет выбран любой фрагмент, которому соответствует 3 идущие подряд буквы s

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


Интересный момент получается, он выбрал все. Почему же? Ответ: та же ситуация, что и в прошлый раз. Он увидел ssss, взял 3 идущие подряд s вместе и еще одну s, которая рядом, ведь она тоже соответствует регулярку (а ведь мы помним, что мы указали диапазон от одного до трех раз)

Ну и напоследок, давайте напишем шаблон, где символ s будет повторяться минимум три раза. Для этого напишем следующее: s ( обозначает, что символ s будет повторяться от трех раз и до бесконечности).


Специальные символы квантификаторов

Есть уже готовые квантификаторы, которые обозначаются спец. символами. Вот они:

? () - символ повторяется 0 или 1 раз

* () - символ повторяется от 0 раз и более

+ () - символ повторяется от 1 и более раз

Давайте разбираться. Начнем со знака вопроса. Допустим у нас есть строка colour color и мы хотим найти либо colour, либо color. Мы можем написать так: colou?r.


Что произошло? Мы указали, что идет последовательность символов colo, потом написали u? (тоже самое, что и u). Это значит, что символ u повторяется 0 или 1 раз (то есть либо его нет вовсе (он не повторяется, то есть повторяется 0 раз), либо он есть, но только один (повторяется один раз)). Ну а потом указали, что после должен идти символ r. Поэтому colour соответствует, так как буква u повторяется 1 раз, а color - так как u вообще отсутствует (повторяется 0 раз). Видите, все просто :)

Давайте изменим строку и напишем что-то по типу colouuuuur color. И допустим мы хотим указать, что u должен либо не быть, либо быть сколько угодно раз. Для этого мы можем написать colou*r.


То есть либо u у нас нет, либо повторяется много раз.

Символ + работает почти также, за исключением того, что символ должен повторяться минимум 1 раз. То есть в данном случае слово color не будет соответствовать, так как там u не присутствует (то есть повторяется 0 раз, а у нас символ должен повторяться минимум 1 раз)


Специальные символы

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

. - одиночный символ

[] - набор символов, например [A-Z] обозначает все символы от A до Z

^ - начало строки

$ - конец строки

\ - экранирование

\d - любая цифра

\D - все, кроме цифр

\s - пробелы

\S - все, кроме пробелов

\w - буква

\W - все, кроме букв

[^someSymbol] - отрицание символа, соответсвие всем символам, кроме выбранного

Поговорим об одиночном символе. Это значит, что будет выбираться любой символ, который повторяется только один раз. Например, вернемся к нашей строке Some text и выберем букву t, после которой идет любой символ. Для этого напишем t.

Выберется te, так как после t идет один любой символ (в данном случае е)


Едем дальше. Допустим, у нас есть строка Some text12345 и мы хотим выбрать все буквы (только буквы, числа нам не нужны). Для этого мы можем написать следующее [A-Z,a-z] . Что же это значит? Это значит, что мы указали, что мы хотим выбрать все символы в диапазоне от A до Z (это мы выбираем все заглавные буквы) и, затем, через запятую, мы говорим о том, что хотим выбрать все символы от a до z (здесь мы выбираем все строчные символы).


Теперь давайте возьмем слово test и выделим в нем первую букву t. Для этого мы можем написать ^t. То есть мы написали символ t и указали, что он должен находиться в самом начале строки. Важно поставить символ ^ перед нужным нам символом.


Теперь давайте сделаем наоборот и возьмем последнюю букву t. Для этого напишем t$. Важно, чтобы символ $ стоял после нужного нам символа.


Перейдем к экранированию. Звучит страшно, но на деле все проще простого. Например, в тексте some text. мы хотим выделить точку. Но ведь точка у нас уже зарезервирована как специальный символ (напоминаю, точка обозначает любой одиночный символ). И чтобы сделать так, чтобы точка на считалась как спец. символ мы можем написать \. и тем самым говоря, что точка у нас будет как обычный символ.


Теперь идут, простые вещи. \d у нас обозначает любую цифру. Например в тексте some text123, если написать \d у нас будут выделяться только цифры.

\D делает все наоборот: берутся все символы, кроме цифр. То есть, если написать \D будет браться все, кроме цифр (и пробелы, кстати, тоже).

\s берет все пробелы, которые есть в строке, а \S - наоборот, все, кроме пробелов.

\w берет буквы, а \W берет, все, кроме букв (в том числе и пробелы).

Теперь расскажу про еще одно применение символа ^. Его можно использовать как отрицание, тем самым исключая символ или группу символов. Например, в слове test мы хотим выбрать все, кроме буквы t и для этого мы можем написать так: [^t]


Именно в такой последовательности символ ^ будет обозначать отрицание.

Lookahead и lookbehind (опережающая и ретроспективная проверки)

Давайте разберемся, что это такое. Lookahead или же опережающая проверка позволяет выбрать символ или группу символов, если после него идет идет какой-либо символ или группа символов. Lookbehind или же ретроспективная проверка позволяет выбрать символ или группу символов, если до них идет какой-то символ или группа символов.

lookahead - опережающая проверка - X(?=Y) - найти Х, при условии, что после него идет Y

негативная опрережающая проверка - Х(?!Y)

lookbehind - ретроспективная проверка - (?<=Y)X - найти Х, при условии, что до него идет Y

негативная ретроспективная проверка - (?<!Y)Xo

Например, дана строка s sw sd st se и мы хотим выбрать букву s, после которой будет идти символ d. Для этого мы можем написать следующее: s(?=d). Таким образом мы как бы проверяем, будет ли идти после символ s символ d.


Также мы можем сделать наоборот и выбрать символ s, если после него НЕ идет символ d. Для этого вместо знака равно мы должны поставить восклицательный знак (!), т.е. написать вот так: s(?!d)


Теперь поговорим о lookbehind. Допустим, у нас есть строка s ws ds ts es и мы хотим выбрать символ s, до которого будет символ d. Для этого мы можем написать так: (?<=d)s


Почему же lookbehind подчеркивается красной линией? Дело в том, что lookbehind не всегда поддерживается и не везде такая регулярка будет работать. Нужно искать способ заменить этот lookbehind, но это зависит от поставленной задачи, поэтому нельзя сказать, как именно ее заменять. Будем надеяться, что в скором временем будет полная поддержка этой возможности.

Чтобы сделать наоборот, то есть выбрать все символы s, до которых НЕ будет идти символ d, нужно опять же поменять знак равно на восклицательный знак: (?<!d)s


Регулярные выражения в разных языках программирования

Здесь я приведу примеры использования регулярных выражений в различных языках программирования. Заранее говорю, я не буду заострять внимание на синтаксисе языка программирования, так как это уже не касается данной темы

Здесь мы создаем строку с текстом, который хотим проверить, создаем объект класса Regex и в конструктор пишем нашу регулярку (как я и говорил, я не буду заострять внимание на том, что такое объект класса и конструктор). Потом создаем объект класса MatchCollection и от объекта regex вызываем метод Matches и в параметры передаем нашу строку. В результате все сопоставления будут добавляться в коллекцию matches.

Java

Здесь похожая ситуация. Создаем объект класса Pattern и записываем нашу строку. CASE_INSENSITIVE означает, что он не привязан к регистру (то есть нет разницы между заглавными и строчными символами). Создаем объект класса Matcher и пишем туда регулярку.

JavaScript

Здесь тоже все просто. Вы создаете объект regex и пишете туда регулярку. И затем просто создаете объект matches, который будет являться коллекцией и вызываете метод exec и в параметры передаете строку.

Заключение

Итак, мы разобрали, что такое регулярные выражения, где они используются, как их писать и использовать в контексте языков программирования. Скажу сразу, написание регулярок приходит с опытом. Практикуйтесь, и я уверен: все у вас получится! А на этом я с вами прощаюсь. Спасибо за внимание и приятного всем дня)

Читайте также: