Найти тему
Linux code

Регулярные выражения

regular expressions - средство и язык для поиска и замены в тексте.

При поиске используется шаблон, который состоит из символов, метасимволов и правила поиска

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

Синтаксис

Обычные символы (литералы)

Большинство символов в регулярном выражении являются обычными символами

Специальные символы (метасимволы)

[ ] \ / ^ $ . | ? * + ( ) { }

Для использования в качестве обычных символов, специальные символы экранируются символом \ (обратная косая черта)

Любой символ

Метасимвол . (точка) означает один любой символ

Символьные классы

Символы в квадратных скобках [ ] указывают интерпретатору, что в данном месте может быть один из указанных символов:

[abcd] - в тексте возможен один из указанных символов

Для указания исключения, используют символ ^ внутри квадратных скобок:

[^0-9] - любой символ, кроме цифр

Символьные классы и специальные метасимволы:

\d [0-9] Цифровой символ
\D [^0-9] Нецифровой символ
\s [ \f\n\r\t\v] Пробельный символ
\S [^ \f\n\r\t\v] Непробельный символ
\w [[:word:]] Буквенный/цифровой символ, знак подчёркивания
\W [^[:word:]] Любой символ, кроме буквенного, цифрового или знака подчёркивания

Позиция в строке

^ Начало текста (или строки при модификаторе ?m):

^c

Результат: ccc ccc


$ Конец текста (или строки при модификаторе ?m):

c$

Результат: ccc ccc


\b Граница слова

c\b

Результат: cccc cccc

\bc

Результат: cccc cccc

\B Не граница слова

\Ba\B

Результат: ccc ccc

\G Предыдущий успешный поиск

\Ga

Результат: ccc ccc

Специальные символы

\n — перевод строки
\r — возврат каретки

Перечисление вариантов

Вертикальная черта разделяет допустимые варианты.

red|green|blue

Группы

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

Поиск последовательностей (Квантификация)

Квантификатор после символа, символьного класса или группы определяет, сколько раз предшествующее выражение может встречаться.

? - Ноль или одно повторение {0,1}
* - Ноль или более повторение {0,}
+ - Одно или более повторение {1,}

красны?й

Результат: краснй, красный

зелены

Результат: зеленй, зеленый, зеленыый

сини+й

Результат: синий, синиий

.* - любое число символов

Жадная, ленивая и ревнивая квантификация

regex* regex*? regex*+
regex? regex+? regex++
regex{n,} regex{n,}? regex{n,}+

ab(xa)*+a

Результат: abxaabxaa