Метасимвол / оператор | Значение |
. | Любой отдельный символ кроме символа перевода строки |
^ | Начало строки |
$ | Конец строки |
[ ] | Любой символ из заключенных в скобках (возможно задание диапазона символов, указав начальный и последний символы диапазона через дефис) |
[^] | Любой символ, кроме тех, что указаны в скобках |
* | Предшествующий шаблон встречается ноль и более раз |
{n} | Предшествующий шаблон встречается ровно n раз |
{n,} | Предшествующий шаблон встречается не менее, чем n раз |
{,n} | Предшествующий шаблон встречается не более, чем n раз |
{n,m} | Предшествующий шаблон встречается не менее n, чем n и не более, чем m раз |
? | Предшествующий шаблон встречается не более одного раза (расширение для egrep и awk) |
+ | Предшествующий шаблон встречается один и более раз (расширение для egrep и awk) |
() | Применяются для группировки выражений для последующего выполнения операций над ними |
| | Позволяет разделить допустимые варианты (логическое ИЛИ) |
\ | Отмена специального значения метасимвола, следующего за ним |
Якорные метасимволы
Метасимвол.
Метасимвол. используется для поиска в тексте одиночных символов, кроме символа перевода строки.
Например, если требуется найти слова, начинающиеся на abc, заканчивающиеся символом z и состоящие из 5 символов, необходимо использовать шаблон
Abс.z
Шаблону соответствуют следующие варианты: abcdz, abc1z. Вариант abcddz не соответствует шаблону, так как вместо единичного символа между abc и z стоят два символа dd. Шаблоном для такого слова будет
Abс..z
Если требуется найти все слова, состоящие из 4 слов и начинающиеся на букву A, необходимо указать следующий шаблон
A…
Метасимвол ^
|
Якорный метасимвол ^ используется для поиска буквосочетаний или единичного символа, стоящих в начале строки.
Так шаблон
^abс
реализует поиск cтрок, начинающихся с буквосочетания abc. Шаблону соответствуют строки abc, abczzz. Строка dabc не соответствует шаблону так как буквосочетание abc находится не в начале слова.
Метасимвол $
Якорный метасимвол $ используется для поиска буквосочетаний или единичного символа, стоящих в конце строки.
Шаблону
de$
соответствуют все строки, заканчивющиеся буквосочетанием de, например, de, abcde.
Следующий шаблон соответствует пустой строке:
^$
Для поиска строк, состоящих только из одного символа, используется следующий шаблон:
^.$
Якорные метасимволы ^ и $ предназначены для обработки текста с привязкой к начальной и конечной позициям регулярного выражения соответственно. По этой причине их называют якорями.
Выбор альтернатив
Операция объединения обозначается метасимволом вертикальной черты | и часто используется в регулярных выражениях. Она поддерживает возможность выбора одной из возможных альтернатив, что позволяет объединять несколько регулярных фрагментов в общее регулярное выражение. Так два регулярных фрагмента UNIX и Windows могут быть связаны в одно общее регулярное выражение, обеспечивающее совпадение с любым из входных слов:
UNIX | Windows
Выражению будут соответствовать слова '' UNIX '' и '' Windows ''.
Если требуется выделить во входном потоке любой символ, включая символ перевода строки, может быть использовано следующее регулярное выражение:
.| \n
Классы символов [ ]
|
Операция [ ] применяется когда необходимо задать набор символов, которые могут находиться в определенной позиции строки. Множество символов, каждый из которых может быть указан в текущей позиции, должны быть указаны внутри квадратных скобок.
Например шаблон
[Aa]bc
будет соответствовать строкам Abc и abc.
Такую конструкцию можно заменить операцией объединения и представить шаблон в виде
Abc|abc
Все метасимволы, указанные внутри [ ] «теряют» свои специальные свойства и интерпретируются как обыкновенные литералы. Исключение составляют три метасимвола
\ - ^
При этом метасимволы дефис - и циркуфлекс ^ интерпретируются различно в зависимости от местоположения внутри регулярного выражения, а метасимвол \ сохраняет свое специальное значение вне зависимости от контекста.
Классы символов, указанные внутри скобок могут быть:
· перечислительными;
· интервальными;
· инвертированными.
Перечислительная спецификация класса подразумевает последовательное указание всех символов класса, например,
[0123456789.,]
соответствует любому из перечисленных в скобках символу.
Если коды символов класса образуют непрерывную возрастающую последовательность, то удобно использовать интервальную спецификацию, где первый и последний символ последовательности разделяет знак дефиса. Так регулярное выражение
[0-9]
соответствует любой цифре от 0 до 9. При этом первый символ задаваемого диапазона должен иметь код ASCII меньший, чем последний. А противном случае, диапазон будет интерпретирован как три независимых символа 9, 0 и дефис - для следующего регулярного выражения (ИЛИ БУДЕТ ОШИБКА – В ЗАВИСИМОСТИ ОТ СРЕДЫПРИМЕНЕНИЯ)
|
[9-0]
Число интервалов в классе может быть произвольным, например, регулярное выражение
[0-9a-zA-Z]
соответствует любой цифре, или латинской букве в любом регистре. Порядок следования диапазонов в классе символов может быть произвольным. Допустимо комбинировать интервальную и перечислительную спецификации в пределах одного класса символов
[0-9abcdefABCDEF]
Если дефис - должен интерпретироваться в классе символов как символ, то он должен быть поставлен в начала или конце последовательности символов. Выражение
[-+0-9] или [+0-9-]
соответствует знакам +, - или любой цифре.
Часто бывает удобнее указать символы, которые не принадлежат некоторому диапазону, чем перечислять их. В этом случае используется инвертируемая запись, для задания которой первым в классе символов указывается циркумфлекс ^.
[Aa][^0-9]
Такая запись предполагает, что на первой позиции слова должна стоять буква A или a, а на второй позиции может идти любой символ, кроме цифры.
Циркумфлекс ^, расположенный в начале класса символов, инвертирует все символы, расположенные внутри. Так регулярное выражение
[^.,a-zA-Z]
соответствует любому символу кроме латинских букв, а также знаков. и,.
Если ^ поставить в середину или конец описания класса символов, он потеряет свое специальное назначение и будет интерпретирован как любой другой символ (литерал).
Следует также помнить, что символ циркумфлекс ^ имеет различный смысл внутри определения класса символов [ ] (инверсия) и за его границами (начало строки).
Символ отмены специального значения метасимвола \, находящийся внутри [ ], сохраняет свое специальное значение в любой части регулярного выражения и реализует действие экранирования. Это позволяет, например, использовать внутри [ ] управляющие символы, специфицированные литеральными константами. Так регулярное выражение
[\n\t]
соответствует двум знакам – горизонтальной табуляции и переводу строки соответственно.
Операцию [ ] можно использовать для экранирования знака пробела, который не является метасимволом, но требует экранирования при вставке в регулярное выражение. Внутри [ ] пробел не требует экранирования.
abc[ ]dfg
Квантификаторы
Квантификаторами называются операторы, обеспечивающие возможность специфицировать в регулярных выражениях возможность повторения символов или групп символов. Среди операторов выделяют четыре квантификатора
? + * { }
Кватификаторы указываются после литерала или класса символов, проверку повторения которых необходимо реализовать.
Квантификатор?
Данный квантификатор указывает на то, что предшествующий ему символ или класс символов может встречаться 0 или 1 раз. Например, шаблону
Abc?d
соответствуют два буквосочетания: Abcd и Abd (в данном случае буква c является необязательной).
Квантификатор *
Используется для обозначения ситуации, когда предшествующий ему литерал может находиться любое число раз (в том числе 0). Оператор * используется для обозначения натуральных чисел
[1-9][0-9]*
Квантификатор +
Оператор + гарантирует наличие как минимум одного экземпляра символа и допускает его неограниченное число повторений. Он может быть полезен, если требуется записать десятичное число, в котором потребовать наличие как минимум одного знака после запятой
[1-9][0-9]*\.[0-9]+
Регулярные выражения
[0-9]+
и
[0-9][0-9]*
являются эквивалентными.
Интервальный квантификатор { }
Позволяет задавать наименьшее обязательное и наибольшее возможное число повторений символа. Квантификатор имеет структуру
символ { n, m }
где n и m – целые неотрицательные десятичные числа, определяющие минимальное и максимальное количества повторений символа или фрагмента регулярного выражения, соответственно. Для n и m должна выполняться зависимость
n =< m
Строки, состоящие только из латинских букв верхнего и нижнего регистра и имеющие длину не более 5 символов (включая пустые строки, которые не содержат символов) можно определить с использованием регулярного выражения
[A-Za-z]{0,5}
Слова, состоящие строго из 5 латинских букв любого регистра, можно задать с помощью шаблона
[A-Za-z]{5,5}