Использование регулярных выражений в 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 удалит из текста повторяющиеся слова.
Совет
В диалоговом окне "Быстрая замена" нажмите кнопку "Использовать регулярные выражения" или нажмите клавиши 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 удалит из текста повторяющиеся слова.
Совет
Нажмите кнопку "Использовать регулярные выражения" (или клавиши 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++. |