Поделиться через


Использование регулярных выражений в Visual Studio

В Visual Studio регулярные выражения .NET используются для поиска и замены текста.

Синтаксис регулярных выражений

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

Характер использования Expression Пример
Соответствует любому одиночному символу, кроме разрыва строки Дополнительные сведения см. в разделе Любой символ. . a.o совпадает с "ато" в слове "каток" и "aзo" в слове "азот", но не с "арто" в слове "картон"
Соответствует нулю или большему числу вхождений предыдущего выражения (совпадение с максимальным числом символов). Дополнительные сведения см. в разделе Совпадение ноль или несколько раз: *. * a*r совпадает с "в" в слове "винт" и "ав" в слове "авто".
Соответствует любому символу ноль или более раз. .* c.*e совпадает со "сне" в слове "снег", "сове" в слове "совет" и "скате" в слове "скатерть"
Соответствует одному или большему числу вхождений предыдущего выражения (совпадение с максимальным числом символов) Дополнительные сведения см. в разделе Совпадение один или несколько раз: +. + e+d совпадает с "eed" в "feeder" и с "ed" в "faded".
Сопоставление любого символа один или более раз. .+ e.+e совпадает с "eede" в "feeder", но в "feed" совпадения отсутствуют.
Соответствует нулю или большему числу вхождений предыдущего выражения (совпадение с минимальным числом символов) Дополнительные сведения см. в разделе Совпадение ноль или несколько раз (ленивое совпадение): *?. *? \w*?d совпадает с "fad" и "ed" в "faded", но не со всем словом "faded", так как проверяется соответствие с минимальным числом символов.
Соответствует одному или большему числу вхождений предыдущего выражения (совпадение с минимальным числом символов) Дополнительные сведения см. в разделе Совпадение один или несколько раз (ленивое совпадение): +?. +? e\w+? совпадает с "ee" в "asleep" и с "ed" в "faded", но в "fade" совпадения отсутствуют.
Привязывает сопоставляемую строку к началу строки. ^ ^car совпадает с такими словами, как "продажа" и "процесс", только если они находятся в начале строки
Привязывает сопоставляемую строку к концу строки. \r?$ car\r?$ совпадает со словом "car", только если оно находится в конце строки.
Соответствует вхождению, только если оно находится в конце файла $ car$ совпадает со словом "car", только если оно находится в конце файла.
Соответствует любому отдельному символу в наборе [abc] b[abc] совпадает с "ба", "бб" и "бв"
Соответствует любому символу в диапазоне символов. [а-е] be[n-t] совпадает с "bet" в слове "between", с "ben" в слове "beneath" и с "bes" в слове "beside", но в слове "below" совпадения отсутствуют.
Запись и неявная нумерация выражения в скобках () ([a-z])X\1 соответствует "aXa" и "bXb", но не "aXb". "\1" относится к первой группе выражения "[а–я]". Дополнительные сведения см. в разделе Группы записи и шаблоны замены.
Признание соответствия недействительным (?!абв) real(?!ity) соответствует "реальным" в "реальности" и "действительно", но не в "реальности". Он также находит второй "реальный" (но не первый "реальный") в "реальности".
Соответствует любому символу, не указанному в заданном наборе символов. Дополнительные сведения см. в разделе Отрицательная группа символов. [^абв] be[^n-t] совпадает с "bef" в слове "before", с "beh" в слове "behind" и с "bel" в слове "below", но в слове "beneath" совпадения отсутствуют.
Совпадает с выражением до или после символа. | (sponge|mud) bath совпадает со строками "хвойный лес" и "лиственный лес"
Экранирует символ, указанный за обратной косой чертой. \ \^ соответствует символу ^
Определяет количество вхождений предыдущего символа или группы. Дополнительные сведения см. в разделе Совпадение ровно n раз: {n}. {n}, где n обозначает число вхождений. x(ab){2}x совпадает с "xababx"
x(ab){2,3}x совпадает с "xababx" и "xabababx", но не "xababababx"
Сопоставление текста в категории Юникода. Дополнительные сведения о классах символов Юникода см. в свойствах символов Юникода Standard 15.0. \p{X}, где "X" — число из Юникода. \p{Lu} совпадает с "T" и "D" в "Thoma Doe"
Соответствует границе слова \b (вне класса символов \b определяет границу слова, а внутри класса \b символов определяет стирание назад) \bin совпадает с "in" в "inside", но в "pinto" совпадения отсутствуют.
Соответствует разрыву линии (т. е. возврат каретки, за которой следует новая строка или только новая строка) \\r?\\n End\r?\nBegin совпадает со словами "Конец" и "Начало", только если "Конец" является последним словом в строке, а "Начало" — первым словом в следующей строке
Соответствует любому алфавитно-цифровому знаку. \\w a\wd совпадает с "акт" и "а1т", но не с "а т"
Соответствует любому символу пробела. \s Public\sInterface совпадает с фразой "Открытый интерфейс"
Соответствует любому символу десятичной цифры \d \d совпадает с "4" и "0" в "wd40".

Пример регулярного выражения, в котором объединяются некоторые операторы и конструкции для сопоставления с шестнадцатеричным числом: \b0[xX]([0-9a-fA-F]+)\b. Это выражение совпадает с "0xc67f", но не с "0xc67g".

Совет

В операционных системах Windows большинство строк заканчиваются символами "\r\n" (возврат каретки с новой строкой). Эти символы не отображаются, но имеются в редакторе и передаются в службу регулярных выражений .NET. При работе с файлами из Интернета или из операционной системы, отличной от Windows, обязательно учитывайте возможность использования новой строки только для разрыва строки.

Группы записи и шаблоны замены

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

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

  • В регулярном выражении: используйте \number. Например, \1 в регулярном выражении (\w+)\s\1 обозначает первую именованную группу, то есть (\w+).

  • В шаблоне замены: используйте $number. Например, группированное регулярное выражение (\d)([a-z]) определяет две группы: первая группа содержит одну десятичную цифру, а вторая группа содержит один символ от a до z. Выражение обнаруживает четыре совпадения в следующей строке: 1a 2b 3c 4d. Строка замены z$1 ссылается только на первую группу ($1) и преобразует строку в z1 z2 z3 z4.

На следующем изображении показаны регулярное выражение (\w+)\s\1 и строка замены $1. Само регулярное выражение и шаблон замены считаются первой группой записи с автоматически присвоенным номером 1. Если вы выполните команду Заменить все в диалоговом окне Быстрая замена, Visual Studio удалит из текста повторяющиеся слова.

Снимок экрана: быстрая замена с нумерованной группой захвата в Visual Studio.

Совет

В диалоговом окне "Быстрая замена" нажмите кнопку "Использовать регулярные выражения" или нажмите клавиши ALT+E.

Именованные группы записи

Вы можете не полагаться на автоматическую нумерацию групп записи, а присвоить им имена. Для именованной группы записи используется синтаксис (?<name>subexpression).

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

  • В регулярном выражении: используйте \k<name>. Например \k<repeated> в регулярном выражении (?<repeated>\w+)\s\k<repeated> ссылается на группу записи с именем repeated, которая содержит часть выражения \w+.

  • В шаблоне замены: используйте ${name}. Например, ${repeated}.

На следующем изображении показаны регулярное выражение (?<repeated>\w+)\s\k<repeated> и строка замены ${repeated}. Само регулярное выражение и шаблон замены указывают на группу записи с именем repeated. Если вы выполните команду Заменить все в диалоговом окне Быстрая замена, Visual Studio удалит из текста повторяющиеся слова.

Снимок экрана: быстрая замена с именованной группой захвата в Visual Studio.

Совет

Нажмите кнопку "Использовать регулярные выражения" (или клавиши ALT+E) в диалоговом окне быстрого замены .

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

Примеры

Расписание Description
int ([_A-Za-z][_A-Za-z0-9]*) Сопоставление определений одного целочисленного числа. Идентификаторы начинаются с одной прописной или строчной буквы, за которой следует нулевая или более (указанная *) буквами или цифрами. Идентификатор фиксируется $1 внешними скобками.
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ Сопоставление целых объявлений C#, которые инициализированы для целых литералов, записывая различные части, включая уровень доступа, модификаторы, например const идентификатор staticи определенное значение. Обратите внимание на использование по крайней мере одного символа пробела \s+ или \s* , если пробелы могут возникнуть или не могут возникнуть.
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) Соответствует открывающей строке foreach цикла. Литеральные скобки экранируются с обратной косой чертой (\). Различные группы записываются как $1, $2и $3 неискаченными скобками.
#define\s+([_A-Za-z][_A-Za-z0-9]*) Соответствует #define определениям (без значения, если таковые имеются). Определенный маркер хранится в $1.
#include\s+["<](.*)[">] Сопоставление включается в исходный файл C++.