Использование регулярных выражений в Visual Studio
Visual Studio использует регулярных выражений .NET для поиска и замены текста.
Синтаксис регулярных выражений
В следующей таблице содержатся некоторые символы регулярного выражения, операторы, конструкции и примеры шаблонов. Для более полного ознакомления см. язык регулярных выражений .
Цель | Выражение | Пример |
---|---|---|
Соответствует любому одному символу (за исключением разрыва строки). Дополнительные сведения см. в разделе Любой символ. | . |
a.o соответствует "aro" в "вокруг" и "abo" в "about", но не "acro" в "через" |
Совпадение ноль или более раз предыдущего выражения (совпадая с максимально возможным количеством символов). Дополнительные сведения см. в разделе Совпадение ноль или более раз. | * |
a*r соответствует "r" в "rack", "ar" в "ark", а "aar" в "aardvark" |
Соответствует любому символу ноль или более раз. | .* |
c.*e соответствует "cke" в "racket", "comme" в "комментарий" и "code" в "code" |
Найдите одно или несколько вхождений предшествующего выражения (сопоставляя как можно больше символов). Дополнительные сведения см. в разделе Сопоставление одного или нескольких раз. | + |
e+d совпадает с "eed" в "feeder" и "ed" в "faded" |
Соответствует любому символу один или несколько раз. | .+ |
e.+e совпадает с "eede" в "feeder", но не находит совпадений в "feed" |
Соответствует нулю или нескольким вхождениям предыдущего выражения (совпадает с наименьшим количеством символов). Дополнительные сведения см. в разделе Совпадение нулевого или более раз (ленивое совпадение). | *? |
\w*?d находит соответствия "fad" и "ed" в "faded", но не всё слово "faded" из-за ленивого соответствия. |
Соответствует одному или нескольким вхождениям предыдущего выражения (совпадают как можно меньше символов). Дополнительные сведения см. в разделе Совпадение один или несколько раз, (ленивое совпадение). | +? |
e\w+? совпадает с "ee" в "спящий" и "ed" в "угасший", но не находит совпадений в "fade" |
Привязка строки сопоставления к началу строки или строки | ^ |
^car соответствует слову "автомобиль" только в начале строки. |
Привязать строку сопоставления к концу строки | \r?$ |
car\r?$ соответствует "автомобиль" только в конце строки |
Привязка строки сопоставления к концу файла | $ |
car$ совпадает с "автомобиль" только если оно появляется в конце файла. |
Сопоставление любого одного символа в наборе | [abc] |
b[abc] соответствует "ba", "bb" и "bc" |
Сопоставьте любой символ в диапазоне символов | [a-f] |
be[n-t] соответствует "bet" в "between", "ben" в "beneath" и "bes" в "beside", но не находит соответствий в "below" |
Зафиксируйте и присвойте неявный номер выражению, содержащемуся в скобках | () |
([a-z])X\1 соответствует "aXa" и "bXb", но не "aXb". "\1" ссылается на первую группу выражений "[a-z]". Дополнительные сведения см. в группах записи и шаблонах замены. |
Аннулировать матч | (?! abc) |
real(?!ity) соответствует "реал" в "реальность" и "действительно", но не в "реальности". Он также находит второй "реал" (но не первый "реал") в "реалреал". |
Соответствует любому символу, не указанному в заданном наборе символов. Дополнительные сведения см. в разделе Отрицательные группы символов. | [^abc] |
be[^n-t] сопоставляется с "bef" в "before", "beh" в "behind" и "bel" в "below", но не находит совпадений в "beneath" |
Сопоставьте либо выражение перед, либо после символа. | | |
(sponge|mud) bath совпадения "обтирание губкой" и "грязевая ванна" |
"Escape" символ после обратной косой черты | \ |
\^ соответствует символу ^ |
Укажите количество вхождений предыдущего символа или группы. Дополнительные сведения см. в разделе Match в точности n раз. | {n}, где "n" — это число вхождений |
x(ab){2}x соответствует "xababx"x(ab){2,3}x совпадает с "xababx" и "xabababx", но не с "xababababx" |
сопоставление текста в категории Unicode. Дополнительные сведения о классах символов Юникода см. в разделе Свойства символов стандарта Юникода 15.0. | \p{X}, где "X" — номер Юникода. |
\p{Lu} совпадает с "Т" и "Д" в "Томас Доу" |
Найти границу слова | \b (вне класса символов \b указывает границу слова, а внутри класса символов \b задает внутреннее пространство.) |
\bin находит совпадения 'in' в 'внутри', но не находит совпадений в 'pinto' |
Соответствует разрыву линии (т. е. возврат каретки, за которой следует новая строка или только новая строка) | \r?\n |
End\r?\nBegin совпадает с "End" и "Begin", только если "End" является последней строкой в строке, а "Begin" — первой строкой в следующей строке. |
Сопоставление любого символа слова | \w |
a\wd соответствует "add" и "a1d", но не "a d" |
Сопоставьте любой символ пробела | \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])
определяют две группы: первая группа содержит одну десятичную цифру, а вторая группа содержит один символ между и 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) в диалоговом окне Быстрая замена.
Дополнительные сведения о именованных группах захвата см. в именованных совпадающих подвыражений. Дополнительные сведения о регулярных выражениях, используемых в шаблонах замены, см. в разделе «Подстановки в регулярных выражениях».
Примеры
Рисунок | Описание |
---|---|
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++. |