Регулярные выражения (C++)
Стандартная библиотека C++ поддерживает несколько грамматик регулярных выражений. В этом разделе рассматриваются варианты грамматики, доступные при использовании регулярных выражений.
Грамматика регулярных выражений
Грамматика регулярного выражения, используемая, определяется с помощью одного из std::regex_constants::syntax_option_type
значений перечисления. Эти грамматики регулярных выражений определены в std::regex_constants
:
- ECMAScript: это ближе всего к грамматике, используемой JavaScript и языками .NET.
- basic: регулярные выражения POSIX basic или BRE.
- extended: регулярные выражения POSIX extended или ERE.
- awk: Это extended, но он имеет больше экранов для непечатаемых символов.
- grep: это basic, но он также позволяет новым (
\n
) символам разделять изменения. - egrep: это extended, но он также позволяет новым символам разделять изменения.
По умолчанию, если грамматика не указана, ECMAScript предполагается. Можно указать только одну грамматику.
Можно также применить несколько флагов:
icase
: игнорировать регистр при сопоставлении.nosubs
: игнорировать помеченные совпадения (то есть выражения в скобках); замены не хранятся.optimize
: сделайте сопоставление быстрее, за возможный счет большего времени строительства.collate
: используйте последовательности сортировки с учетом языкового стандарта (например, диапазоны формы[a-z]
).
Ноль или больше флагов можно объединить с грамматикой, чтобы указать поведение обработчика регулярных выражений. Если указаны только флаги, ECMAScript предполагается как грамматика.
Элемент
Элемент может быть одним из следующих элементов:
Обычный символ, который соответствует такому же символу в целевой последовательности.
Подстановочный знак, соответствующий любому символу
'.'
в целевой последовательности, кроме новой строки.Выражение скобки формы
[expr]
, которое соответствует символу или элементу сортировки в целевой последовательности, которая также находится в наборе, определенном выражениемexpr
, или формой[^expr]
, которая соответствует символу или элементу сортировки в целевой последовательности, которая не находится в наборе, определенном выражениемexpr
.Выражение
expr
может содержать любое сочетание следующих значений:Отдельный символ. Добавляет символ в набор, определенный
expr
.Диапазон символов формы
ch1-ch2
. Добавляет символы, представленные значениями в закрытом диапазоне[ch1, ch2]
, в набор, определенныйexpr
.Класс символов формы
[:name:]
. Добавление символов в именованном классе в набор, заданный выражениемexpr
.Класс эквивалентности формы
[=elt=]
. Добавление элементов упорядочивания, эквивалентныхelt
, в набор, заданный выражениемexpr
.Символ сортировки формы
[.elt.]
. Добавление элемента упорядоченияelt
в набор, заданный выражениемexpr
.
Привязка. Привязка
^
соответствует началу целевой последовательности. Привязка$
соответствует концу целевой последовательности.
Группа захвата формы (подэкспрессия) или \(subexpression\) basic и grep, которая соответствует последовательности символов в целевой последовательности, соответствующей шаблону между разделителями.
- Экран удостоверения формы
\k
, который соответствует символуk
в целевой последовательности.
Примеры:
a
соответствует целевой последовательности, но не соответствует целевым последовательности"a"
или"b"
"c"
."B"
.
соответствует всем целевым"a"
последовательности,"B"
и"b"
"c"
.[b-z]
соответствует целевым"b"
последовательности и"c"
не соответствует целевым последовательности"a"
или"B"
.[:lower:]
соответствует целевым"a"
последовательности и"b"
"c"
не соответствует целевой последовательности"B"
.(a)
соответствует целевой последовательности"a"
и связывает группу записи 1 с подсезоной"a"
, но не соответствует целевым"B"
последовательности или"b"
"c"
.
В ECMAScript, basicа grepтакже элемент может быть обратной ссылкой на форму\dd
, где dd
представляет десятичное значение N, которое соответствует последовательности символов в целевой последовательности, которая совпадает с последовательностью символов, сопоставленной группой захвата Nth.
Например, соответствует целевой последовательности"aa"
, (a)\1
так как первая (и только) группа захвата соответствует начальной последовательности"a"
, а затем \1
соответствует окончательной последовательности"a"
.
В ECMAScriptэлементе также может быть одно из следующих элементов:
Незахватная группа формы (?: подэкспрессия). Соответствует последовательности символов в целевой последовательности, которой соответствует шаблон между разделителями.
Ограниченный экран формата файла формы
\f
,\n
,\r
,\t
или\v
. В целевой последовательности они соответствуют символам перевода строки, возврата каретки, горизонтальной табуляции и вертикальной табуляции, в порядке перечисления.Положительное утверждение формы (= подэкспрессия). Соответствует последовательности символов в целевой последовательности, которая соответствует шаблону между разделителями, но не изменяет положение соответствия в целевой последовательности.
Отрицательное утверждение формы (! subexpression). Соответствует любой последовательности символов в целевой последовательности, которая не соответствует шаблону между разделителями, и не изменяет позицию соответствия в целевой последовательности.
Шестнадцатеричная escape-последовательность формы
\xhh
. Соответствует символу в целевой последовательности, представленному двумя шестнадцатеричными цифрамиhh
.Escape-последовательность юникода формы
\uhhhh
. Соответствует символу в целевой последовательности, представленному четырьмя шестнадцатеричными цифрамиhhhh
.Последовательность escape-элементов элемента управления формы
\ck
. Совпадает с управляющим символом, который именуется символомk
.Утверждение границы слова формы
\b
. Совпадает, если текущая позиция в целевой последовательности расположена сразу после границы слова.Отрицательное утверждение границы слова формы
\B
. Соответствует, если текущая позиция в целевой последовательности не сразу после границы слова.Escape-символ dsw формы
\d
,\D
,\s
,\S
,\w
.\W
Обеспечивает краткое имя класса символов.
Примеры:
(?:a)
соответствует целевой последовательности"a"
, но"(?:a)\1"
является недопустимым, так как не существует группы записи 1.(=a)a
соответствует целевой последовательности"a"
. Положительное утверждение соответствует начальной последовательности"a"
в целевой последовательности и окончательному"a"
в регулярном выражении соответствует начальной последовательности в целевой последовательности"a"
.(!a)a
не соответствует целевой последовательности"a"
.a\b.
соответствует целевой последовательности"a~"
, но не соответствует целевой последовательности"ab"
.a\B.
соответствует целевой последовательности"ab"
, но не соответствует целевой последовательности"a~"
.
В awkэлементе также может быть одно из следующих элементов:
Экран формата файла формы
\\
,\b
\a
,\f
, ,\n
,\r
или\t
\v
. В целевой последовательности они соответствуют символам обратной косой черты, оповещения, стирания назад, перевода строки, возврата каретки, горизонтальной табуляции и вертикальной табуляции, в порядке перечисления.Восьмеричное escape-последовательность формы
\ooo
. Соответствует символу в целевой последовательности, представлением которого является значение, представленное одной, двумя или тремя восьмеричными цифрамиooo
.
Повторение
За любым элементом, кроме положительного утверждения, отрицательного утверждения или привязки, может следовать число повторений. Наиболее общий тип числа повторений принимает форму {min,max}, или \{min,max\} и .basic grep За элементом, за которым следует эта форма количества повторений, совпадает по крайней мере с минимальными последовательными вхождениями и не более чем максимальное число последовательных вхождения последовательности, которая соответствует элементу.
Например, a{2,3}
соответствует целевой последовательности "aa"
и целевой последовательности "aaa"
, но не целевой последовательности "a"
или целевой последовательности "aaaa"
.
Число повторений также может иметь один из перечисленных ниже форматов:
{min} или \{min} в basic и grep. Эквивалент {min,min}.
{min,} или \{min,\} и basic grep. Эквивалент {min,unbounded}.
*
эквивалентен {0,unbounded}.
Примеры:
a{2}
соответствует целевой последовательности, но не целевой последовательности"aa"
"a"
или целевой последовательности"aaa"
.a{2,}
соответствует целевой последовательности, целевой последовательности"aa"
"aaa"
и т. д., но не соответствует целевой последовательности"a"
.a*
соответствует целевой последовательности, целевой последовательности""
"a"
, целевой последовательности"aa"
и т. д.
Для всех грамматик, кроме basic и grep, число повторений также может обладать одним из следующих форматов:
?
эквивалентна {0,1}.+
эквивалентно {1,unbounded}.
Примеры:
a?
соответствует целевой последовательности""
и целевой последовательности"a"
, но не целевой."aa"
a+
соответствует целевой последовательности, целевой последовательности"a"
"aa"
и т. д., но не целевой последовательности""
.
Во ECMAScriptвсех формах количества повторений можно следовать символу ?
, который обозначает не жадное повторение.
Объединение
Элементы регулярного выражения с числом повторений или без него можно объединять для формирования более длинных регулярных выражений. Результирующее выражение соответствует целевой последовательности, которая является объединением последовательностей, соотнесенных по отдельным элементам.
Например, a{2,3}b
соответствует целевой последовательности "aab"
и целевой последовательности, но не соответствует целевой последовательности "ab"
"aaab"
или целевой последовательности"aaaab"
.
Чередование
Во всех грамматиках регулярных выражений, кроме basic того, grepза сцепленным регулярным выражением можно следовать символу |
(каналу) и другому сцепленному регулярному выражению. Таким образом можно объединить любое количество регулярных выражений. Результирующее выражение соответствует любой целевой последовательности, которая соответствует одному или нескольким соединенным регулярным выражением.
Если несколько объединенных регулярных выражений соответствуют целевой последовательности, ECMAScript выбирает первое из сцепленных регулярных выражений, которые соответствуют последовательности в качестве совпадения, которые будут называться первым совпадением. Другие грамматики регулярных выражений выбирают тот, который достигает самого длинного совпадения.
Например, ab|cd
соответствует целевой последовательности "ab"
и целевой последовательности, но не соответствует целевой последовательности "abd"
"cd"
или целевой последовательности"acd"
.
В grep и egrep, новый символ (\n
) можно использовать для разделения переменных.
Часть выражения
В basic и grep часть выражения является объединением. В других грамматиках регулярных выражений часть выражения является чередованием.
Сводка грамматики
В следующей таблице приведены возможности, доступные в различных грамматиках регулярных выражений:
Элемент | basic | extended | ECMAScript | grep | egrep | awk |
---|---|---|---|---|---|---|
изменение с помощью | |
+ | + | + | + | ||
изменение с помощью \n |
+ | + | ||||
привязка | + | + | + | + | + | + |
обратная ссылка | + | + | + | |||
выражение в квадратных скобках | + | + | + | + | + | + |
группа захвата с помощью () |
+ | + | + | + | ||
группа захвата с помощью \(\) |
+ | + | ||||
управляющая escape-последовательность | + | |||||
escape-символ DSW | + | |||||
escape-выражение формата файлов | + | + | ||||
шестнадцатеричная escape-последовательность | + | |||||
escape-последовательность удостоверения | + | + | + | + | + | + |
отрицательное утверждение | + | |||||
отрицательное утверждение границы слова | + | |||||
группа незахвата | + | |||||
"нежадное" повторение | + | |||||
восьмеричная escape-последовательность | + | |||||
обычный символ | + | + | + | + | + | + |
положительное утверждение | + | |||||
повторение с помощью {} |
+ | + | + | + | ||
повторение с помощью \{\} |
+ | + | ||||
повторение с помощью * |
+ | + | + | + | + | + |
повторение с помощью ? и + |
+ | + | + | + | ||
escape-последовательность Юникода | + | |||||
знак подстановки | + | + | + | + | + | + |
утверждение границы слова | + |
Семантические сведения
Привязка
Привязка соответствует позиции в целевой строке, а не символу. Соответствует ^
началу целевой строки и $
соответствует концу целевой строки.
Обратная ссылка
Обратная ссылка — это обратная косая черта, за которой следует десятичное значение N. Она соответствует содержимому N-й группы захвата. Значение N не должно превышать количество групп захвата, предшествующих обратной ссылке. В basic и grep значение N определяется десятичным разрядом, который следует за обратной косой чертой. В грамматике ECMAScript значение N определяется всеми десятичными разрядами, которые следуют за обратной косой чертой. Поэтому в basic и grep значение N никогда не будет больше 9, даже если регулярное выражение содержит более 9 групп захвата. В грамматике ECMAScript значение N не ограничено.
Примеры:
((a+)(b+))(c+)\3
соответствует целевой последовательности"aabbbcbbb"
. Обратная ссылка\3
соответствует тексту в третьей группе захвата, то есть"(b+)"
. Он не соответствует целевой последовательности"aabbbcbb"
.(a)\2
недопустимый.(b(((((((((a))))))))))\10
имеет разные значения в basic и в ECMAScript. В basic, обратная ссылка имеет значение\1
. Обратная ссылка соответствует содержимому первой группы захвата (то есть той, которая начинается(b
с и заканчивается)
окончательным и приходит до обратной ссылки), а окончательный0
соответствует обычному символу0
. В ECMAScript, обратная ссылка имеет значение\10
. Она соответствует десятой группе захвата, т. е. группе, которая находится на наиболее глубоком уровне.
Выражение квадратных скобок
Выражение в квадратных скобках определяет набор символов и элементы упорядочивания. Когда выражение скобки начинается с символа ^
, совпадение завершается успешно, если элементы в наборе не соответствуют текущему символу в целевой последовательности. В противном случае соответствие считается успешным, если любой из элементов в наборе соответствует текущему символу в целевой последовательности.
Набор символов можно определить путем перечисления любого сочетания отдельных символов, диапазонов символов, классов символов, классов эквивалентности и символов упорядочивания.
Группа записи
Группа захвата помечает свое содержимое в качестве единого элемента в грамматике регулярного выражения и снабжает меткой целевой текст, соответствующий ее содержимому. Метка, связанная с каждой группой захвата, является числом, которое определяется подсчетом открытых скобок, которыми помечаются группы захвата, включительно до открывающей скобки, которой помечается текущая группа захвата. В данном случае максимальное число групп захвата равно 31.
Примеры:
ab+
соответствует целевой последовательности"abb"
, но не соответствует целевой последовательности"abab"
.(ab)+
не соответствует целевой последовательности"abb"
, но соответствует целевой последовательности"abab"
.((a+)(b+))(c+)
соответствует целевой последовательности"aabbbc"
и связывает группу записи 1 с подсезоной"aabbb"
, группу захвата 2 с подсчетной последовательностью"aa"
, группу захвата 3 с"bbb"
группой записи 4 с подсчетом"c"
.
Класс знаков
Класс символов в выражении в квадратных скобках добавляет все символы в именованном классе в набор символов, который определяется выражением в квадратных скобках. Чтобы создать класс символов, используйте [:
имя класса, за которым следует :]
.
На внутреннем уровне имена классов символов распознаются путем обращения к функции id = traits.lookup_classname
. Символ ch
принадлежит к одному классу, если traits.isctype(ch, id)
возвращает значение "true". Шаблон regex_traits
по умолчанию поддерживает имена классов в следующей таблице.
Имя класса | Description |
---|---|
alnum |
строчные буквы, прописные буквы и цифры |
alpha |
строчные буквы и прописные буквы |
blank |
пробел или символ табуляции |
cntrl |
символы escape-выражения формата файлов |
digit |
digits |
graph |
строчные буквы, прописные буквы, цифры и символы пунктуации |
lower |
строчные буквы |
print |
строчные буквы, прописные буквы, цифры, символы пунктуации и пробел |
punct |
пунктуация; |
space |
space |
upper |
прописные символы |
xdigit |
цифры, a b c d e f A B C D E F |
d |
то же самое, что и digit |
s |
то же самое, что и space |
w |
то же самое, что и alnum |
Диапазон знаков
Диапазон символов в выражении в квадратных скобках добавляет все символы в диапазоне в набор символов, который определяется выражением в квадратных скобках. Чтобы создать диапазон символов, поместите символ '-'
между первым и последним символами в диапазоне. Диапазон символов помещает все символы с числовым значением, превышающим или равным числовым значением первого символа, и меньше или равно числовым значением последнего символа. Обратите внимание, что этот набор добавленных символов зависит от представления символов, соответствующего платформе. Если символ '-'
происходит в начале или конце выражения скобки, либо как первый или последний символ диапазона символов, он представляет себя.
Примеры:
[0-7]
представляет набор символов {0
,3
2
1
4
,5
,6
7
}. Он соответствует целевым"0"
последовательности ,"1"
и т. д., но не"a"
.В системах, использующих кодировку символов ASCII,
[h-k]
представляет набор символов {h
,i
,j
k
}. Он соответствует целевым"h"
последовательности,"i"
и т. д., но не"\x8A"
."0"
В системах, использующих кодировку символов EBCDIC,
[h-k]
представляет набор символов {h
,i
'\x8B'
'\x8E'
'\x8D'
'\x90'
k
'\x8F'
'\x8C'
'\x8A'
j
} (h
кодируется как иk
кодируется как ).0x88
0x92
Он соответствует целевым"h"
последовательности ,"i"
"\x8A"
и т. д., но не"0"
.[-0-24]
представляет набор символов {-
,0
,1
2
4
}.[0-2-]
представляет набор символов {0
,1
,2
-
}.В системах, использующих кодировку символов ASCII,
[+--]
представляет набор символов {+
,
-
}.
Однако если используются диапазоны с учетом языкового стандарта, символы в диапазоне определяются правилами сортировки, заданными для языкового стандарта. Символы, которые сортируются после первого символа в определении диапазона и до последнего символа в определении диапазона, входят в набор. Также в набор входят два завершающих символа.
Элемент сортировки
Элемент упорядочивания — это многосимвольная последовательность, которая обрабатывается как один символ.
Сортировка символа
Символ упорядочивания в выражении в квадратных скобках добавляет элемент упорядочивания в набор, заданный выражением в квадратных скобках. Чтобы создать символ сортировки, используйте [.
элемент сортировки, за которым следует элемент сортировки, а затем .]
Escape-последовательность элементов управления
Escape-последовательность элемента управления — это обратная косая черта, за которой следует буква 'c'
'a'
, за которой следует одна из букв через 'z'
или 'A'
через 'Z'
. Она соответствует управляющему символу ASCII, который именуется данной буквой. Например, соответствует целевой последовательности"\x09"
, "\ci"
так как ctrl+I имеет значение0x09
.
Экранирование символов DSW
Escape-символ DSW — это краткое имя класса символов, как указано в таблице ниже.
Escape-последовательность | Эквивалентный именованный класс | Именованный класс по умолчанию |
---|---|---|
\d |
[[:d:]] |
[[:digit:]] |
\D |
[^[:d:]] |
[^[:digit:]] |
\s |
[[:s:]] |
[[:space:]] |
\S |
[^[:s:]] |
[^[:space:]] |
\w |
[[:w:]] |
[a-zA-Z0-9_] * |
\W |
[^[:w:]] |
[^a-zA-Z0-9_] * |
*Набор символов ASCII
Класс эквивалентности
Класс эквивалентности в выражении в квадратных скобках добавляет все символы и элементы упорядочивания, эквивалентные элементу упорядочивания в определении класса эквивалентности, в набор, заданный выражением в квадратных скобках.
Чтобы создать класс эквивалентности, используйте [=
элемент сортировки, за которым следует =]
. На внутреннем уровне два элемента упорядочивания elt1
и elt2
эквивалентны, если traits.transform_primary(elt1.begin(), elt1.end()) == traits.transform_primary(elt2.begin(), elt2.end())
.
Escape-файловый формат
Escape-файл состоит из обычных escape-последовательностей символов языка C, \\
, \a
, \b
. \t
\v
\f
\n
\r
Они имеют обычные значения, то есть обратная косая черта, оповещение, пространство спины, веб-канал формы, новая линия, возврат каретки, горизонтальная вкладка и вертикальная вкладка соответственно. В ECMAScript, \a
и \b
не разрешены. (\\
допускается, но это escape-файл, а не escape-формат файла).
Шестнадцатеричная escape-последовательность
Шестнадцатеричная escape-последовательность — это обратная косая черта, за которой следует буква x
с двумя шестнадцатеричными цифрами (0-9a-fA-F
). Она соответствует символу в целевой последовательности, имеющему значение, указанное данными двумя цифрами.
Например, "\x41"
соответствует целевой последовательности "a"
при использовании кодировки символов ASCII.
Escape-идентификатор
Escape-последовательность удостоверения — это обратная косая черта, за которой следует один символ. Она соответствует данному символу. Это необходимо, если символ имеет особое значение. При использовании escape-адреса удостоверения удаляется специальное значение. Например:
a*
соответствует целевой последовательности"aaa"
, но не соответствует целевой последовательности"a*"
.a\*
не соответствует целевой последовательности"aaa"
, но соответствует целевой последовательности"a*"
.
Набор символов, которые могут использоваться в escape-последовательности удостоверения, зависит от грамматики регулярного выражения, как указано в таблице ниже.
грамматики | Допустимые символы escape-последовательности удостоверения |
---|---|
basic, grep | { } ( ) { } . [ \ * ^ $ |
extended, egrep | { } ( ) { . [ \ * ^ $ + ? | |
awk, extended | plus { } " / |
ECMAScript | Все символы, кроме символов, которые могут быть частью идентификатора. Как правило, это буквы, цифры, $ и _ escape-последовательности юникода. Дополнительные сведения см. в спецификации ECMAScript языка. |
Отдельный символ
Отдельный символ в выражении в квадратных скобках добавляет данный символ в набор символов, который определяется выражением в квадратных скобках. Любое место в выражении скобки, кроме самого начала, ^
представляет себя.
Примеры:
[abc]
соответствует целевым"a"
последовательности,"b"
а"c"
не последовательности"d"
.[^abc]
соответствует целевой последовательности"d"
, но не целевым"a"
последовательности,"b"
или"c"
.[a^bc]
соответствует целевым"a"
последовательности ,"b"
"c"
и"^"
, но не целевой последовательности"d"
.
Во всех грамматиках регулярных выражений, кроме ECMAScriptтого, если ]
первый символ следует открытию [
или является первым символом, который следует за начальным ^
, он представляет себя.
Примеры:
[]a
недопустим, так как выражение скобки не]
заканчивается.[]abc]
соответствует целевым"a"
последовательности ,"b"
"c"
и"]"
, но не целевой последовательности"d"
.[^]abc]
соответствует целевой последовательности"d"
, но не целевым"a"
последовательности,"c"
"b"
или"]"
.
В ECMAScript, используйте \]
для представления символа ]
в выражении скобки.
Примеры:
[]a
соответствует целевой последовательности"a"
, так как выражение скобки пусто.[\]abc]
соответствует целевым"a"
последовательности ,"b"
"c"
и"]"
не целевой последовательности"d"
.
Отрицательное утверждение
Отрицательное утверждение соответствует любым данным, кроме своего содержимого. Он не использует никаких символов в целевой последовательности.
Например, (!aa)(a*)
соответствует целевой последовательности "a"
и связывает группу записи 1 с вложенным значением "a"
. Он не соответствует целевой последовательности "aa"
или целевой последовательности "aaa"
.
Утверждение границы отрицательного слова
Отрицательное утверждение границы слова совпадает, если текущая позиция в целевой строке не сразу после границы слова.
Группа без записи
Группа без отслеживания помечает его содержимое как одну единицу в грамматике регулярного выражения, но не метка целевого текста.
Например, (a)(?:b)*(c)
соответствует целевому тексту "abbc"
и связывает группу записи 1 с подсезоной "a"
и группой записи 2 с подсезоной "c"
.
Не жадное повторение
"Нежадное" повторение использует наиболее краткую часть целевой последовательности, соответствующую шаблону. "Жадное" повторение использует наиболее длинное. Например, (a+)(a*b)
соответствует целевой последовательности "aaab"
.
Если используется не жадное повторение, он связывает группу захвата 1 с подсезоной "a"
в начале целевой последовательности и записи группы 2 с подсезоной "aab"
в конце целевой последовательности.
Если используется жадное совпадение, он связывает группу захвата 1 с подсезоной "aaa"
и группой захвата 2 с подсеченностью "b"
.
Восьмеричное escape-последовательность
Восьмеричная escape-последовательность — это обратная косая черта, за которой следует одна, две или три восьмеричных цифры (0-7). Она соответствует символу в целевой последовательности со значением, заданным этими цифрами. Если все цифры имеются 0
, последовательность недопустимая.
Например, \101
соответствует целевой последовательности "a"
при использовании кодировки символов ASCII.
Обычный символ
Обычный символ является любым допустимым символом, который не имеет специального значения в текущей грамматике.
В грамматике ECMAScript специальное значение имеют следующие символы:
^
$
\
.
*
+
?
(
)
[
]
{
}
|
В грамматиках basic и grep специальное значение имеют следующие символы:
.
[
\
basic grepКроме того, следующие символы имеют особые значения, когда они используются в определенном контексте:
*
имеет особое значение во всех случаях, за исключением тех случаев, когда это первый символ в регулярном выражении или первый символ, который следует за инициалом в регулярном выражении, или когда это первый символ группы захвата или первый символ, который следует за начальным^
^
в группе захвата.^
имеет особое значение, когда это первый символ регулярного выражения.$
имеет особое значение, когда это последний символ регулярного выражения.
В грамматиках extended, egrep и awk специальное значение имеют следующие символы:
.
[
\
(
*
+
?
{
|
Кроме того, в extendedследующих awkegrepсимволах имеются специальные значения, когда они используются в определенном контексте.
)
имеет особое значение, если оно соответствует предыдущему(
^
имеет особое значение, когда это первый символ регулярного выражения.$
имеет особое значение, когда это последний символ регулярного выражения.
Обычный символ соответствует такому же символу в целевой последовательности. По умолчанию это означает, что соответствие успешно, если два символа представлены тем же значением. В соответствии без учета регистра два символа ch0
и ch1
являются соответствующими, если traits.translate_nocase(ch0) == traits.translate_nocase(ch1)
. В соответствии с учетом языкового стандарта два символа ch0
и ch1
являются соответствующими, если traits.translate(ch0) == traits.translate(ch1)
.
Положительное утверждение
Положительное утверждение соответствует его содержимому, но не использует никаких символов в целевой последовательности.
Примеры:
(=aa)(a*)
соответствует целевой последовательности"aaaa"
и связывает группу записи 1 с подсезоной"aaaa"
.(aa)(a*)
соответствует целевой последовательности и связывает группу отслеживания 1 с подсезоной"aa"
в начале целевой последовательности"aaaa"
и группой записи 2 с подсезоной"aa"
в конце целевой последовательности.(=aa)(a)|(a)
сопоставляет целевую последовательность и связывает группу записи 1 с пустой последовательностью"a"
(так как положительный утверждение завершился сбоем) и записывает группу 2 с подсеченностью"a"
. Он также соответствует целевой последовательности"aa"
и связывает группу записи 1 с подсезоной"aa"
и группой записи 2 с пустой последовательностью.
Escape-последовательность Юникода
Escape-последовательность юникода — это обратная косая черта, за которой следует буква 'u'
с четырьмя шестнадцатеричными цифрами (0-9a-fA-F
). Она соответствует символу в последовательности целевого объекта, имеющего значение, заданное четырьмя цифрами. Например, \u0041
соответствует целевой последовательности "a"
при использовании кодировки символов ASCII.
Символ-шаблон
Символ-шаблон соответствует любому символу в целевом выражении, кроме новой строки.
Граница Word
Граница слова появляется в следующих ситуациях:
Текущий символ находится в начале целевой последовательности и является одним из словообразующих символов
A-Za-z0-9_
Текущая позиция символа находится за целевой последовательностью, и последний символ в целевой последовательности является одним из словообразующих символов.
Текущий символ является одним из символов слова, и предыдущий символ не является.
Текущий символ не является одним из символов слова, а указанный выше символ.
Утверждение границ Word
Утверждение границы слова является соответствующим, если текущая позиция в целевой строке — сразу после границы слова.
Сопоставление и поиск
Чтобы регулярное выражение соответствовало целевой последовательности, все данное выражение должно соответствовать целевой последовательности целиком. Например, регулярное выражение bcd
соответствует целевой последовательности, но не соответствует целевой последовательности "abcd"
"bcd"
или целевой последовательности"bcde"
.
Для успешного поиска регулярного выражения одна из частей целевой последовательности должна соответствовать данному регулярному выражению. Обычно результатом поиска является крайняя левая соответствующая часть последовательности.
Примеры:
Поиск регулярного выражения
bcd
в целевой последовательности"bcd"
завершается успешно и соответствует всей последовательности. Тот же поиск в целевой последовательности"abcd"
также выполняется успешно и соответствует последним трем символам. Тот же поиск в целевой последовательности"bcde"
также выполняется успешно и соответствует первым трем символам.Поиск регулярного выражения
bcd
в целевой последовательности"bcdbcd"
завершается успешно и соответствует первым трем символам.
Если в целевой последовательности имеется несколько вложенных параметров, которые соответствуют определенному расположению в целевой последовательности, можно выбрать соответствующий шаблон.
Первое соответствие выбирает часть последовательности, найденную первой при установке соответствия с регулярным выражением.
Наиболее длинное соответствие выбирает самую длинную часть последовательности из соответствующих в данном положении. Если имеется несколько подсезон, которые имеют максимальную длину, самый длинный матч выбирает тот, который был найден первым.
Например, когда используется первое совпадение, поиск регулярного выражения b|bc
в целевой последовательности "abcd"
соответствует подсчету "b"
, так как левый термин изменения совпадает с подсчетом, поэтому первое совпадение не пытается использовать правый термин изменения. Если используется самое длинное совпадение, то же поиск совпадает "bc"
, так как "bc"
больше "b"
.
Частичное совпадение завершается, если совпадение достигает конца целевой последовательности без сбоя, даже если оно не достигло конца регулярного выражения. Поэтому после успешного частичного совпадения добавление символов в конец целевой последовательности может вызвать ошибку последующего частичного соответствия. Однако после сбоя частичного совпадения добавление символов в целевую последовательность не может привести к успешному успешному частичному совпадению. Например, при частичном совпадении соответствует целевой последовательности"a"
, ab
но не "ac"
.
Форматирование флагов
ECMAScript Правила форматирования | Правила форматирования sed | Текст замены |
---|---|---|
$& |
& |
Последовательность символов, которая соответствует всему регулярному выражению: [match[0].first, match[0].second) |
$$ |
$ |
|
\& |
& |
|
$`" (знак доллара, за которым следует обратная цитата) |
Последовательность символов, предшествующая подсефференции, которая соответствует регулярному выражению: [match.prefix().first, match.prefix().second) |
|
$'" (знак доллара, за которым следует вперед цитата) |
Последовательность символов, следующая подсеблюду, которая соответствует регулярному выражению: [match.suffix().first, match.suffix().second) |
|
$n |
\n |
Последовательность символов, которая соответствует группе захвата в позиции n , где n имеется число от 0 до 9: [match[n].first, match[n].second) |
\\n |
\n |
|
$nn |
Последовательность символов, которая соответствует группе захвата в позиции nn , где nn имеется число от 10 до 99: [match[nn].first, match[nn].second) |