- Глава 18. Регулярные выражения
- 18.1. Краткое введение в регулярные выражения
- Примечания
- Регулярные выражения в Grep (Regex)
- Регулярное выражение Grep
- Буквальные совпадения
- Якорь
- Соответствующий одиночный символ
- Выражения в скобках
- Квантификаторы
- Чередование
- Группировка
- Специальные выражения обратной косой черты
- Выводы
Глава 18. Регулярные выражения
Для того, чтобы полностью реализовать потенциал командной оболочки, вам придется овладеть Регулярными Выражениями. Многие команды и утилиты, обычно используемые в сценариях, такие как grep, expr, sed и awk, используют Регулярные Выражения.
18.1. Краткое введение в регулярные выражения
Выражение — это строка символов. Символы, которые имеют особое назначение, называются метасимволами . Так, например, кавычки могут выделять прямую речь, т.е. быть метасимволами для строки, заключенной в эти кавычки. Регулярные выражения — это набор символов и/или метасимволов, которые наделены особыми свойствами. [1]
Основное назначение регулярных выражений — это поиск текста по шаблону и работа со строками.
Звездочка — * — означает любое количество символов в строке, предшествующих «звездочке», в том числе и нулевое число символов .
Выражение «1133*» — означает 11 + один или более символов «3» + любые другие символы: 113, 1133, 113312, и так далее.
Точка — . — означает не менее одного любого символа, за исключением символа перевода строки (\n). [2]
Выражение «13.» будет означать 13 + по меньшей мере один любой символ (включая пробел): 1133, 11333, но не 13 (отсутствуют дополнительные символы).
Символ — ^ — означает начало строки, но иногда, в зависимости от контекста, означает отрицание в регулярных выражениях.
Знак доллара — $ — в конце регулярного выражения соответствует концу строки.
Выражение «^$» соответствует пустой строке.
Квантификатор | Классы персонажей |
---|---|
[:alnum:] | Буквенно-цифровые символы. |
[:alpha:] | Буквенные символы. |
[:blank:] | Пробел и табуляция. |
[:digit:] | Цифры. |
[:lower:] | Строчные буквы. |
[:upper:] | Заглавные буквы. |
Полный список всех классов персонажей можно найти в руководстве по Grep .
Квантификаторы
Квантификаторы позволяют указать количество вхождений элементов, которые должны присутствовать, чтобы совпадение произошло. В следующей таблице показаны квантификаторы, поддерживаемые GNU grep :
Квантификатор | Описание |
---|---|
* | Сопоставьте предыдущий элемент ноль или более раз. |
? | Соответствует предыдущему элементу ноль или один раз. |
+ | Сопоставьте предыдущий элемент один или несколько раз. |
Сравните предыдущий элемент ровно n раз. | |
Сопоставьте предыдущий элемент не менее n раз. | |
Соответствовать предыдущему элементу не более m раз. | |
Сопоставьте предыдущий элемент от n до m раз. |
Символ * (звездочка) соответствует предыдущему элементу ноль или более раз. Следующее будет соответствовать «right», «sright», «ssright» и так далее:
Ниже представлен более сложный шаблон, который соответствует всем строкам, которые начинаются с заглавной буквы и заканчиваются точкой или запятой. Регулярное выражение .* Соответствует любому количеству любых символов:
? (знак вопроса) символ делает предыдущий элемент необязательным и может соответствовать только один раз. Следующие будут соответствовать как «ярким», так и «правильным». ? Символ экранирован обратной косой чертой, потому что мы используем базовые регулярные выражения:
Вот то же регулярное выражение с использованием расширенного регулярного выражения:
Символ + (плюс) соответствует предыдущему элементу один или несколько раз. Следующее будет соответствовать «sright» и «ssright», но не «right»:
Фигурные скобки <> позволяют указать точное число, верхнюю или нижнюю границу или диапазон вхождений, которые должны произойти, чтобы совпадение произошло.
Следующее соответствует всем целым числам, содержащим от 3 до 9 цифр:
Чередование
Термин «чередование» представляет собой простое «ИЛИ». Оператор чередования | (pipe) позволяет вам указать различные возможные совпадения, которые могут быть буквальными строками или наборами выражений. Этот оператор имеет самый низкий приоритет среди всех операторов регулярных выражений.
В приведенном ниже примере мы ищем все вхождения слов fatal , error и critical в файле ошибок журнала Nginx :
Если вы используете расширенное регулярное выражение, то оператор | не следует экранировать, как показано ниже:
Группировка
Группировка — это функция регулярных выражений, которая позволяет группировать шаблоны вместе и ссылаться на них как на один элемент. Группы создаются с помощью круглых скобок () .
При использовании основных регулярных выражений скобки должны быть экранированы обратной косой чертой ( ).
Следующий пример соответствует как «бесстрашный», так и «меньший». ? квантификатор делает группу (fear) необязательной:
Специальные выражения обратной косой черты
GNU grep включает несколько метасимволов, которые состоят из обратной косой черты, за которой следует обычный символ. В следующей таблице показаны некоторые из наиболее распространенных специальных выражений обратной косой черты:
Выражение | Описание |
---|---|
b | Сопоставьте границу слова. |
Соответствует пустой строке в начале слова. | |
> | Соответствует пустой строке в конце слова. |
w | Подберите слово. |
s | Подберите пробел. |
Следующий шаблон будет соответствовать отдельным словам «abject» и «object». Он не будет соответствовать словам, если вложен в слова большего размера:
Выводы
Регулярные выражения используются в текстовых редакторах, языках программирования и инструментах командной строки, таких как grep , sed и awk . Знание того, как создавать регулярные выражения, может быть очень полезным при поиске текстовых файлов, написании сценариев или фильтрации вывода команд.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник