Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Стандартная библиотека 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\} и .basicgrep За элементом, за которым следует эта форма количества повторений, совпадает по крайней мере с минимальными последовательными вхождениями и не более чем максимальное число последовательных вхождения последовательности, которая соответствует элементу.
Например, a{2,3} соответствует целевой последовательности "aa" и целевой последовательности "aaa", но не целевой последовательности "a" или целевой последовательности "aaaa".
Число повторений также может принимать одну из следующих форм:
{min} или \{min} в basic и grep. Эквивалент {min,min}.
{min,} или \{min,\} и basicgrep. Эквивалент {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) можно использовать для разделения переменных.
Subexpression
В basic и grep, подэкспрессия является объединением. В других грамматиках регулярных выражений подтекст является изменением.
Сводка грамматики
В следующей таблице перечислены функции, доступные в различных грамматиках регулярных выражений:
| Элемент | basic | extended | ECMAScript | grep | egrep | awk |
|---|---|---|---|---|---|---|
изменение с помощью | |
+ | + | + | + | ||
изменение с помощью \n |
+ | + | ||||
| anchor | + | + | + | + | + | + |
| обратная ссылка | + | + | + | |||
| Выражение скобки | + | + | + | + | + | + |
группа захвата с помощью () |
+ | + | + | + | ||
группа захвата с помощью \(\) |
+ | + | ||||
| escape-последовательность элементов управления | + | |||||
| экранирование символов dsw | + | |||||
| Escape-файловый формат | + | + | ||||
| шестнадцатеричная escape-последовательность | + | |||||
| escape-идентификатор | + | + | + | + | + | + |
| отрицательное утверждение | + | |||||
| утверждение границы отрицательного слова | + | |||||
| группа без записи | + | |||||
| не жадное повторение | + | |||||
| восьмеричное escape-последовательность | + | |||||
| обычный символ | + | + | + | + | + | + |
| положительное утверждение | + | |||||
повторение с помощью {} |
+ | + | + | + | ||
повторение с помощью \{\} |
+ | + | ||||
повторение с помощью * |
+ | + | + | + | + | + |
повторение с помощью ? и + |
+ | + | + | + | ||
| Escape-последовательность юникода | + | |||||
| Подстановочный знак | + | + | + | + | + | + |
| Утверждение границы слова | + |
Семантические сведения
Anchor
Привязка соответствует позиции в целевой строке, а не символу. Соответствует ^ началу целевой строки и $ соответствует концу целевой строки.
Обратная ссылка
Обратная косая черта, за которой следует десятичное значение N. Он соответствует содержимому группы записи Nth. Значение N не должно превышать число групп записи, предшествующих обратной ссылке. В basic и grep, значение N определяется десятичной цифрой, которая следует обратной косой черте. В ECMAScript, значение N определяется всеми десятичными цифрами, которые немедленно следуют обратной косой черте. Таким образом, значение basicgrepN никогда не превышает 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 |
Цифр |
graph |
строчные буквы, прописные буквы, цифры и знаки препинания |
lower |
строчные буквы |
print |
строчные буквы, прописные буквы, цифры, знаки препинания и пробелы |
punct |
пунктуация; |
space |
Пробел |
upper |
прописные буквы; |
xdigit |
цифры, abcdefABCDEF |
d |
то же самое, что и digit |
s |
то же самое, что и space |
w |
то же самое, что и alnum |
Диапазон символов
Диапазон символов в выражении скобки добавляет все символы в диапазоне к набору символов, определенному выражением скобки. Чтобы создать диапазон символов, поместите символ '-' между первым и последним символами в диапазоне. Диапазон символов помещает все символы с числовым значением, превышающим или равным числовым значением первого символа, и меньше или равно числовым значением последнего символа. Обратите внимание, что этот набор добавленных символов зависит от представления символов конкретной платформы. Если символ '-' происходит в начале или конце выражения скобки, либо как первый или последний символ диапазона символов, он представляет себя.
Примеры.
[0-7]представляет набор символов {0,3214,5,67}. Он соответствует целевым"0"последовательности ,"1"и т. д., но не"a".В системах, использующих кодировку символов ASCII,
[h-k]представляет набор символов {h,i,jk}. Он соответствует целевым"h"последовательности,"i"и т. д., но не"\x8A"."0"В системах, использующих кодировку символов EBCDIC,
[h-k]представляет набор символов {h,i'\x8B''\x8E''\x8D''\x90'k'\x8F''\x8C''\x8A'j} (hкодируется как иkкодируется как ).0x880x92Он соответствует целевым"h"последовательности ,"i""\x8A"и т. д., но не"0".[-0-24]представляет набор символов {-,0,124}.[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-адреса удостоверения удаляется специальное значение. Рассмотрим пример.
a*соответствует целевой последовательности"aaa", но не соответствует целевой последовательности"a*".a\*не соответствует целевой последовательности"aaa", но соответствует целевой последовательности"a*".
Набор символов, разрешенных в экране удостоверения, зависит от грамматики регулярного выражения, как показано в следующей таблице.
| грамматика | Разрешенные символы 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) |