Что необходимо знать о регулярных выражениях - Версия для печати +- форум о заработке в интернете (https://rublsdollars.ru/forum) +-- Форум: Форумы по программированию (https://rublsdollars.ru/forum/forumdisplay.php?fid=3) +--- Форум: Регулярные выражения (https://rublsdollars.ru/forum/forumdisplay.php?fid=4) +--- Тема: Что необходимо знать о регулярных выражениях (/showthread.php?tid=13) |
Что необходимо знать о регулярных выражениях - shat - 11-18-2024 Шпаргалка по регулярным выражениям shat18.11.20240 Квантификаторы Аналог Пример Описание ? {0,1} a? одно или ноль вхождений «а» + {1,} a+ одно или более вхождений «а» * {0,} a* ноль или более вхождений «а» Модификаторы Символ «минус» (-) меред модификатором (за исключением U) создаёт его отрицание. Описание g глобальный поиск (обрабатываются все совпадения с шаблоном поиска) i игнорировать регистр m многострочный поиск. Поясню: по умолчанию текст это одна строка, с модификатором есть отдельные строки, а значит Код: ^ Код: $ s текст воспринимается как одна строка, спец символ «точка» (.) будет вкючать и перевод строки u используется кодировка UTF-8 U инвертировать жадность x игнорировать все неэкранированные пробельные и перечисленные в классе символы Спецсимволы Аналог Описание () подмаска, вложенное выражение [] групповой символ {a,b} количество вхождений от «a» до «b» | логическое «или», в случае с односимвольными альтернативами используйте [] \ экранирование спец символа . любой сивол, кроме перевода строки \d [0-9] десятичная цифра \D [^\d] любой символ, кроме десятичной цифры \f конец (разрыв) страницы \n перевод строки \pL буква в кодировке UTF-8 при использовании модификатора u \r возврат каретки \s [ \t\v\r\n\f] пробельный символ \S [^\s] любой символ, кроме промельного \t табуляция \w [0-9a-z_] любая цифра, буква или знак подчеркивания \W [^\w] любой символ, кроме цифры, буквы или знака подчеркивания \v вертикальная табуляция Спецсимволы внутри символьного класса Пример Описание ^ [^da] отрицание, любой символ кроме «d» или «a» — [a-z] интервал, любой симво от «a» до «z» Позиция внутри строки Пример Соответствие Описание ^ ^a aaa aaa начало строки $ a$ aaa aaa конец строки \A \Aa aaa aaa aaa aaa начало текста \z a\z aaa aaa aaa aaa конец текста \b a\b \ba aaa aaa aaa aaa граница слова, утверждение: предыдущий символ словесный, а следующий — нет, либо наоборот \B \Ba\B aaa aaa отсутствие границы слова \G \Ga aaa aaa Предыдущий успешный поиск, поиск остановился на 4-й позиции — там, где не нашлось a Скачать в PDF, PNG. Якоря Якоря в регулярных выражениях указывают на начало или конец чего-либо. Например, строки или слова. Они представлены определенными символами. К примеру, шаблон, соответствующий строке, начинающейся с цифры, должен иметь следующий вид: Код: ^[0-9]+ Здесь символ Код: ^ Символьные классы Символьные классы в регулярных выражениях соответствуют сразу некоторому набору символов. Например, Код: \d Код: \w Код: \W Код: \w\s POSIX POSIX — это относительно новое дополнение семейства регулярных выражений. Идея, как и в случае с символьными классами, заключается в использовании сокращений, представляющих некоторую группу символов. Утверждения Поначалу практически у всех возникают трудности с пониманием утверждений, однако познакомившись с ними ближе, вы будете использовать их довольно часто. Утверждения предоставляют способ сказать: «я хочу найти в этом документе каждое слово, включающее букву “q”, за которой не следует “werty”». Код: [^\s]*q(?!werty)[^\s]* Приведенный выше код начинается с поиска любых символов, кроме пробела ( Код: [^\s]* Код: q Код: ?! Итак, парсер проверяет несколько следующих символов по предложенному шаблону ( Код: werty Код: q Код: werty Код: q Код: [^\s]* Кванторы Кванторы позволяют определить часть шаблона, которая должна повторяться несколько раз подряд. Например, если вы хотите выяснить, содержит ли документ строку из от 10 до 20 (включительно) букв «a», то можно использовать этот шаблон: Код: a{10,20} По умолчанию кванторы — «жадные». Поэтому квантор Код: + Код: ".*" Этот шаблон соответствует тексту, заключенному в двойные кавычки. Однако, ваша исходная строка может быть вроде этой: Код: <a href="helloworld.htm" title="Привет, Мир">Привет, Мир</a> Приведенный выше шаблон найдет в этой строке вот такую подстроку: Код: "helloworld.htm" title="Привет, Мир" Он оказался слишком жадным, захватив наибольший кусок текста, который смог. Код: ".*?" Этот шаблон также соответствует любым символам, заключенным в двойные кавычки. Но ленивая версия (обратите внимание на модификатор Код: ? Код: "helloworld.htm" "Привет, Мир" Экранирование в регулярных выражениях Регулярные выражения используют некоторые символы для обозначения различных частей шаблона. Однако, возникает проблема, если вам нужно найти один из таких символов в строке, как обычный символ. Точка, к примеру, в регулярном выражении обозначает «любой символ, кроме переноса строки». Если вам нужно найти точку в строке, вы не можете просто использовать « Код: . Знак экранирования, предшествующий символу вроде точки, заставляет парсер игнорировать его функцию и считать обычным символом. Есть несколько символов, требующих такого экранирования в большинстве шаблонов и языков. Вы можете найти их в правом нижнем углу шпаргалки («Мета-символы»). Шаблон для нахождения точки таков: Код: \. Другие специальные символы в регулярных выражениях соответствуют необычным элементам в тексте. Переносы строки и табуляции, к примеру, могут быть набраны с клавиатуры, но вероятно собьют с толку языки программирования. Знак экранирования используется здесь для того, чтобы сообщить парсеру о необходимости считать следующий символ специальным, а не обычной буквой или цифрой. Спецсимволы экранирования в регулярных выражениях Выражение Соответствие \ не соответствует ничему, только экранирует следующий за ним символ. Это нужно, если вы хотите ввести метасимволы Код: !$()*+.<>?[\]^{|} \Q не соответствует ничему, только экранирует все символы вплоть до Код: \E не соответствует ничему, только прекращает экранирование, начатое Код: \Q Подстановка строк подробно описана в следующем параграфе «Группы и диапазоны», однако здесь следует упомянуть о существовании «пассивных» групп. Это группы, игнорируемые при подстановке, что очень полезно, если вы хотите использовать в шаблоне условие «или», но не хотите, чтобы эта группа принимала участие в подстановке. Группы и диапазоны Группы и диапазоны очень-очень полезны. Вероятно, проще будет начать с диапазонов. Они позволяют указать набор подходящих символов. Например, чтобы проверить, содержит ли строка шестнадцатеричные цифры (от 0 до 9 и от A до F), следует использовать такой диапазон: Код: [A-Fa-f0-9] Чтобы проверить обратное, используйте отрицательный диапазон, который в нашем случае подходит под любой символ, кроме цифр от 0 до 9 и букв от A до F: Код: [^A-Fa-f0-9] Группы наиболее часто применяются, когда в шаблоне необходимо условие «или»; когда нужно сослаться на часть шаблона из другой его части; а также при подстановке строк. Использовать «или» очень просто: следующий шаблон ищет «ab» или «bc»: Код: (ab|bc) Если в регулярном выражении необходимо сослаться на какую-то из предшествующих групп, следует использовать Код: \n Код: n Код: (aaa|bbb)[0-9]+\1 Первая часть шаблона ищет «aaa» или «bbb», объединяя найденные буквы в группу. За этим следует поиск одной или более цифр ( Код: [0-9]+ Код: \1 Код: \1 Одним из наиболее полезных инструментов в регулярных выражениях является подстановка строк. При замене текста можно сослаться на найденную группу, используя Код: $n Код: replace(pattern, replacement, subject) Первым параметром будет примерно такой шаблон (возможно вам понадобятся несколько дополнительных символов для этой конкретной функции): Код: ([^A-Za-z0-9])(wish)([^A-Za-z0-9]) Он найдет любые вхождения слова «wish» вместе с предыдущим и следующим символами, если только это не буквы или цифры. Тогда ваша подстановка может быть такой: Код: $1<b>$2</b>$3 Ею будет заменена вся найденная по шаблону строка. Мы начинаем замену с первого найденного символа (который не буква и не цифра), отмечая его Код: $1 Код: $3 Код: <strong> Код: $2 Модификаторы шаблонов Модификаторы шаблонов используются в нескольких языках, в частности, в Perl. Они позволяют изменить работу парсера. Например, модификатор Код: i Регулярные выражения в Perl обрамляются одним и тем же символом в начале и в конце. Это может быть любой символ (чаще используется «/»), и выглядит все таким образом: Код: /pattern/ Модификаторы добавляются в конец этой строки, вот так: Код: /pattern/i Категории |