Random data from regex


Метод ищет совпадение с в строке . В отличие от предыдущих методов, вызывается на регулярном выражении, а не на строке.

Он ведёт себя по-разному в зависимости от того, имеет ли регулярное выражение флаг .

Если нет , то возвращает первое совпадение в точности как . Такое поведение не даёт нам ничего нового.

Но если есть , то:

  • Вызов возвращает первое совпадение и запоминает позицию после него в свойстве .
  • Следующий такой вызов начинает поиск с позиции , возвращает следующее совпадение и запоминает позицию после него в .
  • …И так далее.
  • Если совпадений больше нет, то возвращает , а для устанавливается значение .

Таким образом, повторные вызовы возвращают одно за другим все совпадения, используя свойство для отслеживания текущей позиции поиска.

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

Это работает и сейчас, хотя для современных браузеров , как правило, удобнее.

Мы можем использовать для поиска совпадения, начиная с нужной позиции, если вручную поставим .


Если у регулярного выражения стоит флаг , то поиск будет вестись не начиная с позиции , а только на этой позиции (не далее в тексте).

В примере выше заменим флаг на . Ничего найдено не будет, поскольку именно на позиции слова нет:

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

Using Regular Expression

While matching patterns, you can use the regular expression which provides more flexibility.

Check the following example which matches all the lines starting with daemon and then deletes them −

$ cat testing | sed '/^daemon/d'
root:x:0:0:root user:/root:/bin/sh

Following is the example which deletes all the lines ending with sh

$ cat testing | sed '/sh$/d'

The following table lists four special characters that are very useful in regular expressions.

Sr.No. Character & Description


Matches the beginning of lines



Matches the end of lines



Matches any single character



Matches zero or more occurrences of the previous character


Matches any one of the characters given in chars, where chars is a sequence of characters. You can use the — character to indicate a range of characters.

Literal Characters

The most basic regular expression consists of a single literal character, such as a. It matches the first occurrence of that character in the string. If the string is Jack is a boy, it matches the a after the J.

This regex can match the second a too. It only does so when you tell the regex engine to start searching through the string after the first match. In a text editor, you can do so by using its “Find Next” or “Search Forward” function. In a programming language, there is usually a separate function that you can call to continue searching through the string after the previous match.

Twelve characters have special meanings in regular expressions: the backslash \, the caret ^, the dollar sign $, the period or dot ., the vertical bar or pipe symbol |, the question mark ?, the asterisk or star *, the plus sign +, the opening parenthesis (, the closing parenthesis ), the opening square bracket , and the opening curly brace {. These special characters are often called “metacharacters”. Most of them are errors when used alone.

If you want to use any of these characters as a literal in a regex, you need to escape them with a backslash. If you want to match 1+1=2, the correct regex is 1\+1=2. Otherwise, the plus sign has a special meaning.

Substitution Flags

There are a number of other useful flags that can be passed in addition to the g flag, and you can specify more than one at a time.

Sr.No. Flag & Description


Replaces all matches, not just the first match



Replaces only NUMBERth match



If substitution was made, then prints the pattern space



If substitution was made, then writes result to FILENAME


I or i

Matches in a case-insensitive manner


M or m

In addition to the normal behavior of the special regular expression characters ^ and $, this flag causes ^ to match the empty string after a newline and $ to match the empty string before a newline

Comments in Free-Spacing Mode

Another feature of free-spacing mode is that the # character starts a comment. The comment runs until the end of the line. Everything from the # until the next newline character is ignored. Most flavors do not recognize any other line break characters as the end of a comment, even if they recognize other line breaks as free whitespace or allow . JGsoft V2 is the only flavor that recognizes all Unicode line breaks. Boost misses the vertical tab.

XPath and Oracle do not support comments within the regular expression, even though they have a free-spacing mode. They always treat # as a literal character.

Java is the only flavor that treats # as the start of a comment inside character classes in free-spacing mode. The comment runs until the end of the line, so you can use a ] to close a comment. All other flavors treat # as a literal inside character classes. That includes Perl 5.26 in /xx mode.

Putting it all together, the regex to match a valid date can be clarified by writing it across multiple lines:

(19|20)\d\d- /.(1-9|1012)- /.(1-9|12-9|301)

Character Class Keywords

Some special keywords are commonly available to regexps, especially GNU utilities that employ regexps. These are very useful for sed regular expressions as they simplify things and enhance readability.

For example, the characters a through z and the characters A through Z, constitute one such class of characters that has the keyword ]

Using the alphabet character class keyword, this command prints only those lines in the /etc/syslog.conf file that start with a letter of the alphabet −

$ cat /etc/syslog.conf | sed -n '/^]/p'
authpriv.*                         /var/log/secure
mail.*                             -/var/log/maillog
cron.*                             /var/log/cron
uucp,news.crit                     /var/log/spooler
local7.*                           /var/log/boot.log

The following table is a complete list of the available character class keywords in GNU sed.

Sr.No. Character Class & Description








Blank characters (spaces or tabs)



Control characters






Any visible characters (excludes whitespace)



Lowercase letters



Printable characters (non-control characters)



Punctuation characters






Uppercase letters



Hex digits

Free-Spacing in Character Classes

A character class is generally treated as a single token. abc is not the same as  a b c . The former matches one of three letters, while the latter matches those three letters or a space. In other words: free-spacing mode has no effect inside character classes. Spaces and line breaks inside character classes will be included in the character class. This means that in free-spacing mode, you can use or to match a single space. Use whichever you find more readable. The \x20 also works, of course.

Java, however, does not treat a character class as a single token in free-spacing mode. Java does ignore spaces, line breaks, and comments inside character classes. So in Java’s free-spacing mode, abc is identical to abc. To add a space to a character class, you’ll have to escape it with a backslash. But even in free-spacing mode, the negating caret must appear immediately after the opening bracket. ^abc matches any of the four characters ^, a, b or c just like abc^ would. With the negating caret in the proper place, ^abc matches any character that is not a, b or c.

Perl 5.26 offers limited free-spacing within character classes as an option. The /x flag enables free-spacing outside character classes only, as in previous versions of Perl. The double /xx flag additionally makes Perl 5.26 treat unescaped spaces and tabs inside character classes as free whitespace. Line breaks are still literals inside character classes. PCRE2 10.30 supports the same /xx mode as Perl 5.26 if you pass the flag PCRE2_EXTENDED_MORE to pcre2_compile().

Perl 5.26 and PCRE 10.30 also add a new mode modifier (?xx) which enables free-spacing both inside and outside character classes. (?x) turns on free-spacing outside character classes like before, but also turns off free-spacing inside character classes. (?-x) and (?-xx) both completely turn off free-spacing.

Java treats the ^ in ^a as a literal. Even when spaces are ignored they still break the special meaning of the caret in Java. Perl 5.26 and PCRE2 10.30 treat ^ in ^a as a negation caret in /xx mode. Perl 5.26 and PCRE2 10.30 totally ignore free whitespace. They still consider the caret to be at the start of the character class.

Regular Expression — Documentation


Character What does it do?
  • Used to indicate that the next character should NOT be interpreted literally. For example, the character ‘w’ by itself will be interpreted as
    ‘match the character w’, but using ‘\w’ signifies ‘match an alpha-numeric character including underscore’.
  • Used to indicate that a metacharacter is to be interpreted literally. For example, the ‘.’ metacharacter means ‘match any single character but a new line’, but if
    we would rather match a dot character instead, we would use ‘\.’.
  • Matches the beginning of the input. If in multiline mode, it also matches after a line break character, hence every new line.
  • When used in a set pattern (), it negates the set; match anything not enclosed in the brackets
$ Matches the end of the input. If in multiline mode, it also matches before a line break character, hence every end of line.
* Matches the preceding character 0 or more times.
+ Matches the preceding character 1 or more times.
  • Matches the preceding character 0 or 1 time.
  • When used after the quantifiers *, +, ? or {}, makes the quantifier non-greedy; it will match
    the minimum number of times as opposed to matching the maximum number of times.
. Matches any single character except the newline character.
(x) Matches ‘x’ and remembers the match. Also known as capturing parenthesis.
(?:x) Matches ‘x’ but does NOT remember the match. Also known as NON-capturing parenthesis.
x(?=y) Matches ‘x’ only if ‘x’ is followed by ‘y’. Also known as a lookahead.
x(?!y) Matches ‘x’ only if ‘x’ is NOT followed by ‘y’. Also known as a negative lookahead.
x|y Matches ‘x’ OR ‘y’.
{n} Matches the preceding character exactly n times.
{n,m} Matches the preceding character at least n times and at most m times. n and m can be omitted if zero..
Matches any of the enclosed characters. Also known as a character set.
You can create range of characters using the hyphen character such as A-Z (A to Z). Note that in character sets,
special characters (., *, +) do not have any special meaning.
Matches anything NOT enclosed by the brackets. Also known as a negative character set.
Matches a backspace.
\b Matches a word boundary. Boundaries are determined when a word character is NOT followed or NOT preceeded with another word character.
\B Matches a NON-word boundary. Boundaries are determined when two adjacent characters are word characters OR non-word characters.
\cX Matches a control character. X must be between A to Z inclusive.
\d Matches a digit character. Same as or .
\D Matches a NON-digit character. Same as or .
\f Matches a form feed.
\n Matches a line feed.
\r Matches a carriage return.
\s Matches a single white space character. This includes space, tab, form feed and line feed.
\S Matches anything OTHER than a single white space character. Anything other than space, tab, form feed and line feed.
\t Matches a tab.
\v Matches a vertical tab.
\w Matches any alphanumeric character incuding underscore. Equivalent to .
\W Matches anything OTHER than an alphanumeric character incuding underscore. Equivalent to .
\x A back reference to the substring matched by the x parenthetical expression. x is a positive integer.
\0 Matches a NULL character.
\xhh Matches a character with the 2-digits hexadecimal code.
\uhhhh Matches a character with the 4-digits hexadecimal code.


Escape преобразует строку, чтобы обработчик регулярных выражений мог интерпретировать любые метасимволы, которые могут содержаться в виде символьных литералов.Escape converts a string so that the regular expression engine will interpret any metacharacters that it may contain as character literals. Например, рассмотрим регулярное выражение, которое предназначено для извлечения комментариев, разделенных прямыми открывающими и закрывающими квадратными скобками () из текста.For example, consider a regular expression that is designed to extract comments that are delimited by straight opening and closing brackets () from text. В следующем примере регулярное выражение «» интерпретируется как класс символов.In the following example, the regular expression «» is interpreted as a character class. Вместо того, чтобы сопоставлять комментарии, внедренные во входной текст, регулярное выражение соответствует каждой открывающей или закрывающей круглой скобке, точке, звездочке или вопросительному знаку.Rather than matching comments embedded in the input text, the regular expression matches each opening or closing parenthesis, period, asterisk, or question mark.

Однако если открывающая квадратная скобка передается в метод Escape, то регулярное выражение завершается успешно при совпадении комментариев, внедренных во входную строку.However, if the opening bracket is escaped by passing it to the Escape method, the regular expression succeeds in matching comments that are embedded in the input string. Это демонстрируется в следующем примере:The following example illustrates this.

В регулярном выражении, которое определено с помощью статического текста, символы, которые должны интерпретироваться буквально, а не как метасимволы, могут быть экранированы перед ними с помощью символа обратной косой черты (\), а также путем вызова метода Escape.In a regular expression that is defined by using static text, characters that are to be interpreted literally rather than as metacharacters can be escaped by preceding them with a backslash symbol (\) as well as by calling the Escape method. В регулярном выражении, которое определено динамически с помощью символов, неизвестных во время разработки, вызов метода Escape особенно важен для того, чтобы механизм регулярных выражений интерпретирует отдельные символы как литералы, а не как метасимволы.In a regular expression that is defined dynamically using characters that are not known at design time, calling the Escape method is particularly important to ensure that the regular expression engine interprets individual characters as literals rather than as metacharacters.


Если шаблон регулярного выражения содержит либо символ решетки (#), либо символы-разделители, они должны быть экранированы, если входной текст анализируется с включенным параметром .If a regular expression pattern includes either the number sign (#) or literal white-space characters, they must be escaped if input text is parsed with the option enabled.

Хотя Escape метод экранирует прямой Открытие квадратная скобка ( и}).While the Escape method escapes the straight opening bracket ( and }). В большинстве случаев их экранирование не требуется.In most cases, escaping these is not necessary. Если закрывающей квадратной скобке или фигурной скобке не предшествует соответствующий открывающий символ, обработчик регулярных выражений интерпретирует его буквально.If a closing bracket or brace is not preceded by its corresponding opening character, the regular expression engine interprets it literally. Если открывающая квадратная скобка или фигурная скобка интерпретируется как метасимвол, обработчик регулярных выражений интерпретирует первый соответствующий закрывающий символ как метасимвол.If an opening bracket or brace is interpreted as a metacharacter, the regular expression engine interprets the first corresponding closing character as a metacharacter. Если это не требуемое поведение, закрывающую скобку или фигурную скобку следует заключать в escape-последовательность, явно добавив символ обратной косой черты (\).If this is not the desired behavior, the closing bracket or brace should be escaped by explicitly prepending the backslash (\) character. Иллюстрации см. в разделе «пример».For an illustration, see the Example section.

Сложности с обратными косыми

Обратные косые немного усложняют жизнь в мире регулярных выражений Python. Это связанно с тем, что регулярные выражения используют обратные косые для определения специальных форм, или для того, чтобы искать определенный символ, вместо того, чтобы вызывать его. Как если бы мы искали символ доллара $. Если мы не используем обратную косую для этого, нам нужно просто создать анкор. Проблема возникает по той причине, что Python использует символ обратной косой по той же причине в литеральных строках.

Давайте представим, что вам нужно найти строку на подобии этой: «python». Для её поиска в регулярном выражении, вам нужно будет использовать обратную косую, но, так как Python также использует обратную косую, так что на выходе вы получите следующий поисковый паттерн: «\\python» (без скобок). К счастью, Python поддерживает сырые строки, путем подстановки буквы r перед строкой. Так что мы можем сделать выдачу более читабельной, введя следующее: r”\python”. Так что если вам нужно найти что-то с обратной косой в названии, убедитесь, что используете сырые строки для этой цели, иначе можете получить совсем не то, что ищете.

Text Patterns and Matches

A regular expression, or regex for short, is a pattern describing a certain amount of text. On this website, regular expressions are highlighted in red as regex. This is actually a perfectly valid regex. It is the most basic pattern, simply matching the literal text regex. Matches are highlighted in blue on this site. We use the term “string” to indicate the text that the regular expression is applied to. Strings are highlighted in green.

Characters with special meanings in regular expressions are highlighted in various different colors. The regex (?x)(Rregexp?)\? shows meta tokens in purple, grouping in green, character classes in orange, quantifiers and other special tokens in blue, and escaped characters in gray.

More Detailed Examples

Numeric Ranges. Since regular expressions work with text rather than numbers, matching specific numeric ranges requires a bit of extra care.

Matching a Floating Point Number. Also illustrates the common mistake of making everything in a regular expression optional.

Matching Valid Dates. A regular expression that matches 31-12-1999 but not 31-13-1999.

Finding or Verifying Credit Card Numbers. Validate credit card numbers entered on your order form. Find credit card numbers in documents for a security audit.

Matching Complete Lines. Shows how to match complete lines in a text file rather than just the part of the line that satisfies a certain requirement. Also shows how to match lines in which a particular regex does not match.

Removing Duplicate Lines or Items. Illustrates simple yet clever use of capturing parentheses or backreferences.

Regex Examples for Processing Source Code. How to match common programming language syntax such as comments, strings, numbers, etc.

Two Words Near Each Other. Shows how to use a regular expression to emulate the “near” operator that some tools have.

Address Substitution

If you want to substitute the string sh with the string quiet only on line 10, you can specify it as follows −

$ cat /etc/passwd | sed '10s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/sh

Similarly, to do an address range substitution, you could do something like the following −

$ cat /etc/passwd | sed '1,5s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/quiet

As you can see from the output, the first five lines had the string sh changed to quiet, but the rest of the lines were left untouched.

Согласуемые символы

Когда вам нужно найти символ в строке, в большей части случаев вы можете просто использовать этот символ или строку. Так что, когда нам нужно проверить наличие слова «dog», то мы будем использовать буквы в dog. Конечно, существуют определенные символы, которые заняты регулярными выражениями. Они так же известны как метасимволы. Внизу изложен полный список метасимволов, которые поддерживают регулярные выражения Python:


. ˆ $ * + ? { } | ( )

1 . ˆ $ * + ? { } | ( )

Давайте взглянем как они работают. Основная связка метасимволов, с которой вы будете сталкиваться, это квадратные скобки: . Они используются для создания «класса символов», который является набором символов, которые вы можете сопоставить. Вы можете отсортировать символы индивидуально, например, так: . Это сопоставит любой внесенный в скобки символ. Вы также можете использовать тире для выражения ряда символов, соответственно: . В этом примере мы сопоставим одну из букв в ряде между a и g. Фактически для выполнения поиска нам нужно добавить начальный искомый символ и конечный. Чтобы упростить это, мы можем использовать звездочку. Вместо сопоставления *, данный символ указывает регулярному выражению, что предыдущий символ может быть сопоставлен 0 или более раз. Давайте посмотрим на пример, чтобы лучше понять о чем речь:



1 ‘ab-f*f

Этот шаблон регулярного выражения показывает, что мы ищем букву а, ноль или несколько букв из нашего класса, и поиск должен закончиться на f. Давайте используем это выражение в Python:


import re
text = ‘abcdfghijk’

parser = re.search(‘a*f’)
print(parser.group()) # ‘abcdf’





print(parser.group())# ‘abcdf’

В общем, это выражение просмотрит всю переданную ей строку, в данном случае это abcdfghijk.
Выражение найдет нашу букву «а» в начале поиска. Затем, в связи с тем, что она имеет класс символа со звездочкой в конце, выражение прочитает остальную часть строки, что бы посмотреть, сопоставима ли она. Если нет, то выражение будет пропускать по одному символу, пытаясь найти совпадения. Вся магия начинается, когда мы вызываем поисковую функцию модуля re. Если мы не найдем совпадение, тогда мы получим None. В противном случае, мы получим объект Match. Чтобы увидеть, как выглядит совпадение, вам нужно вызывать метод group. Существует еще один повторяемый метасимвол, аналогичный *. Этот символ +, который будет сопоставлять один или более раз. Разница с *, который сопоставляет от нуля до более раз незначительна, на первый взгляд.

Символу + необходимо как минимум одно вхождение искомого символа. Последние два повторяемых метасимвола работают несколько иначе. Рассмотрим знак вопроса «?», применение которого выгладит так: “co-?op”. Он будет сопоставлять и “coop” и “co-op”. Последний повторяемый метасимвол это {a,b}, где а и b являются десятичными целыми числами. Это значит, что должно быть не менее «а» повторений, но и не более «b». Вы можете попробовать что-то на подобии этого:



1 xb{1,4}z

Это очень примитивный пример, но в нем говорится, что мы сопоставим следующие комбинации: xbz, xbbz, xbbbz и xbbbbz, но не xz, так как он не содержит «b».

Следующий метасимвол это ^. Этот символ позволяет нам сопоставить символы которые не находятся в списке нашего класса. Другими словами, он будет дополнять наш класс. Это сработает только в том случае, если мы разместим ^ внутри нашего класса. Если этот символ находится вне класса, тогда мы попытаемся найти совпадения с данным символом. Наглядным примером будет следующий: . Так, выражения будет искать совпадения с любой буквой, кроме «а». Символ ^ также используется как анкор, который обычно используется для совпадений в начале строки.

Существует соответствующий якорь для конце строки – «$». Мы потратим много времени на введение в различные концепты применения регулярных выражений. В следующих параграфах мы углубимся в более подробные примеры кодов.

Grabbing HTML Tags

\b^>*>(.*?) matches the opening and closing pair of a specific HTML tag. Anything between the tags is captured into the first backreference. The question mark in the regex makes the star lazy, to make sure it stops before the first closing tag rather than before the last, like a greedy star would do. This regex will not properly match tags nested inside themselves, like in onetwoone.

(A-ZA-Z-9*)\b^>*>(.*?)\1> will match the opening and closing pair of any HTML tag. Be sure to turn off case sensitivity. The key in this solution is the use of the backreference \1 in the regex. Anything between the tags is captured into the second backreference. This solution will also not match tags nested in themselves.

Replacing All Matches

To replace all matches in a string, call std::regex_replace() with your subject string as the first parameter, the regex object as the second parameter, and the string with the replacement text as the third parameter. The function returns a new string with the replacements applied.

The replacement string syntax is similar but not identical to that of JavaScript. The same replacement string syntax is used regardless of which regex syntax or grammar you are using. You can use $& or $0 to insert the whole regex match and $1 through $9 to insert the text matched by the first nine capturing groups. There is no way to insert the text matched by groups 10 or higher. $10 and higher are always replaced with nothing, and $9 and lower are replaced with nothing if there are fewer capturing groups in the regex than the requested number. $‘ (dollar backtick) is the part of the string to the left of the match, and $' (dollar quote) is the part of the string to the right of the match.


Проверяет, совпадает ли регулярное выражение со всей целевой строкой.Tests whether a regular expression matches the entire target string.


\ с двунаправленным письмомBidIt
Тип итератора для подстрок соответствия.The iterator type for submatches. В общих случаях это один из , , или .For common cases this one of , , or .

\ выделенияAlloc
Класс распределителя результатов соответствия.The match results allocator class.

ElemElemТип элементов для обеспечения соответствия.The type of elements to match. В общих случаях это , , или .For common cases this is , , or .

РкстраитсRXtraitsКласс характеристик для элементов.Traits class for elements.

Alloc2Alloc2Класс распределителя регулярного выражения.The regular expression allocator class.

ИотраитсIOtraitsКласс характеристик строки.The string traits class.

ИоаллокIOallocКласс распределителя строк.The string allocator class.

flagsflagsФлаги для соответствий.Flags for matches.

первыйfirstНачало последовательности для сопоставления.Beginning of sequence to match.

последниеlastКонец последовательности для сопоставления.End of sequence to match.

совпадениеmatchРезультаты сопоставления.The match results. Соответствует типу Elem: для , для , для или для .Corresponds to Elem type: for , for , for or for .

\ ptrptr
Указатель на начало последовательности для сопоставления.Pointer to beginning of sequence to match. Если ptr , используйте и .If ptr is , then use and . Если ptr , используйте и .If ptr is then use and .

повторноеreРегулярное выражение для сопоставления.The regular expression to match. Введите для и или для и .Type for and , or for and .

\ strstr
Сопоставляемая строка.String to match. Соответствует типу elem.Corresponds to the type of Elem.


Каждая функция шаблона возвращает значение true только в том случае, если вся строка последовательности операндов в точности соответствует аргументу Reрегулярного выражения.Each template function returns true only if the entire operand sequence str exactly matches the regular expression argument re. Используйте , чтобы сопоставить подстроку в целевой последовательности и для поиска нескольких совпадений.Use to match a substring within a target sequence and to find multiple matches. Функции, принимающие объект , указывают в своих членах, выполнено ли сопоставление успешно и, в этом случае, какие группы захвата в регулярном выражении были определены.The functions that take a object set its members to reflect whether the match succeeded and if so what the various capture groups in the regular expression captured.

Функции, принимающие объект , указывают в своих членах, выполнено ли сопоставление успешно и, в этом случае, какие группы захвата в регулярном выражении были определены.The functions that take a object set its members to reflect whether the match succeeded and if so what the various capture groups in the regular expression captured.

Applications & Languages That Support Regexes

There are many software applications and programming languages that support regular expressions. If you are a programmer, you can save yourself lots of time and effort. You can often accomplish with a single regular expression in one or a few lines of code what would otherwise take dozens or hundreds.

Many applications and programming languages have their own implementation of regular expressions, often with slight and sometimes with significant differences from other implementations. When two applications use a different implementation of regular expressions, we say that they use different “regular expression flavors”. Unlike most other regex tutorials, the tutorial on this website covers all the popular regular expression flavors, and indicates the differences that you should watch out for.

Character Classes or Character Sets

A “character class” matches only one out of several characters. To match an a or an e, use ae. You could use this in graey to match either gray or grey. A character class matches only a single character. graey does not match graay, graey or any such thing. The order of the characters inside a character class does not matter.

You can use a hyphen inside a character class to specify a range of characters. -9 matches a single digit between 0 and 9. You can use more than one range. -9a-fA-F matches a single hexadecimal digit, case insensitively. You can combine ranges and single characters. -9a-fxA-FX matches a hexadecimal digit or the letter X.

Typing a caret after the opening square bracket negates the character class. The result is that the character class matches any character that is not in the character class. q^x matches qu in question. It does not match Iraq since there is no character after the q for the negated character class to match.

Ссылка на основную публикацию