Regex101 com как пользоваться
Перейти к содержимому

Regex101 com как пользоваться

  • автор:

Тест регулярных выражений онлайн

Эта статья содержит краткий обзор сайтов с функцией тестирования регулярных выражений.

Регулярные выражения используются во многих направлениях программирования, но они довольно непросты для анализа и отладки.

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

regularexpressions101

Это сайт доступен по ссылке https://regex101.com/ и:

  • Анализирует регулярное выражение, показывает его составляющие и объяснения. Если найдена ошибка, она подсвечивается.
  • Выделяет цветом в тексте найденные строки, также можно посмотреть список ($&\n)
  • Проверяет замены по регулярному выражению, показывая результирующий текст
  • Выполняет тесты на совпадение или несовпадение

Поддерживаются варианты регулярных выражений

  • PCRE2 (PHP >= 7.3)
  • PCRE (PHP < 7.3)
  • ECMAScript (JavaScript)
  • Python 2.7
  • Golang
  • Java 8

Интерфейс сайта доступен на английском или с локализацией на:

  • Голландский
  • Китайский
  • Немецкий
  • Французский
  • Шведский

Кроме того, на сайте имеется функция генератора кода для различных языков программирования и командной строки для sed.

RegExr

  • Анализирует регулярное выражение, показывает его составляющие и описания. Ошибки подсвечиваются.
  • Проверяет поиск по регулярному выражению и выделяет цветом найденные строки в тексте. Имеется вывод списка найденных строк.
  • Проверяет замены по регулярному выражению, показывая результирующий текст.

Сайт поддерживает два варианта регулярных выражений:

Заключение

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

Используя эти инструменты, можно составить регулярное выражение, сразу проверив его на ошибки и проанализировав его состав, затем посмотреть, что именно оно находит, и как происходит замена. После того, как регулярное выражение проверено, уже можно вставлять его в скрипт или программу.

Инструменты обладают удобным интерфейсом со справочной информацией по регулярным выражениям, подсветкой ошибок, выделением найденных строк.

https://regex101.com предлагает больше вариантов для вариаций формата регулярных выражений (6 против 2) и показался мне более удобным в плане интерфейса, хотя разница не такая большая. Для наиболее часто используемых ECMAScript и PCRE подходят оба сайта, поэтому можно пользоваться любым.

Программа nhrt использует ECMAScript, поэтому оба сайта https://regex101.com и https://regexr.com/ рекомендуются для проверки при составлении регулярных выражений для nhrt.

Тест регулярных выражений онлайн

  • ← В Asana появился русский язык
  • Преобразование html и txt →

Regex101

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

[править] Описание

Сайт состоит из 2 полей, в которые необходимо ввести регулярное выражение (без ограничителей по краям, за которые приняты стандартные «/») и флаги (необязательно). Также надо скопировать в поле текст, на котором проверяется выражение. При этом обработка производится автоматически по мере заполнения полей.

В случае, если в тексте найдено совпадение, будет отображена именно совпавшая часть.

Также сайт позволяет посмотреть разобранное выражение в виде дерева (правда, по наглядности проигрывает Регекспёру).

Есть страница сайта в Твиттере @regex101 , возможность пожертвовать деньги с помощью PayPal.

[править] См. также

[править] Ссылки

Как новичку разобраться в регулярных выражениях

Раньше из регулярных выражений я использовал только (.*) 🙂 Несколько друзей настоятельно советовали мне разобраться в этом вопросе. Но не понимая, где их можно применять, я откладывал это до лучших времен.

Все изменилось, когда мне пришлось более плотно работать с Google Analytics и Google Tag Manager в Netpeak. Без понимания регулярных выражений сложно представить себе нормальную настройку фильтров, пользовательских сегментов в GA или правил в GTM.

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

Что такое регулярные выражения

Регулярные выражения (regular expressions, RegExp) — наборы символов, применяемых для поиска текстовых строк, соответствующих требуемым условиям. Результат применения регулярного выражения — подмножество данных, отобранное согласно логике, заложенной в выражении. Регулярные выражения применяются в любых задачах по поиску в множестве данных, для которых нужно получать выжимку по определенным правилам.

Синтаксис регулярных выражений

Большинство символов в регулярных выражениях представляют сами себя, за исключением группы специальных символов «[ ] / ^ $ . | ? * + ( ) < >». Если эти символы нужно представить в качестве символов текста, их следует экранировать обратной косой чертой «».

Если эти спецсимволы встречаются без обратной косой черты, значит у них особенные значения в регулярных выражениях:

  • «^» — каретка, циркумфлекс или просто галочка. Начало строки;
  • «$» — знак доллара. Конец строки;
  • «.» — точка. Любой символ;
  • «*» – знак умножения, звездочка. Любое количество предыдущих символов;
  • «+» – плюс. 1 или более предыдущих символов;
  • «?» – вопросительный знак. 0 или 1 предыдущих символов;
  • «( )» – круглые скобки. Группировка конструкций;
  • «|» – вертикальная линия. Оператор «ИЛИ»;
  • «[ ]» – квадратные скобки. Любой из перечисленных символов, диапазон. Если первый символ в этой конструкции – «^», то массив работает наоборот – проверяемый символ не должен совпадать с тем, что перечислено в скобках;
  • «< >» – фигурные скобки. Повторение символа несколько раз;
  • «» – обратный слеш. Экранирование служебных символов.

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

  • — обозначает не символ, а границу между символами;
  • d — цифровой символ;
  • D — нецифровой символ;
  • s — пробельный символ;
  • S — непробельный символ;
  • w — буквенный или цифровой символ или знак подчеркивания;
  • W — любой символ, кроме буквенного или цифрового символа или знака подчеркивания.

Пять способов протестировать свои знания о регулярных выражениях

При изучении регулярных выражений очень важна практика. Чем больше практикуешься, тем быстрее начинаешь строить нужные конструкции и решать поставленные задачи.

1. Изучаем регулярные выражения в текстовом редакторе

Почти всем новичкам я сразу рекомендую ставить текстовый редактор NotePad++ и начинать тренироваться в нём. Почему именно в этом текстовом редакторе:

  • в большинстве случаев спецсимволы не нужно экранировать;
  • Notepad++ сохраняет конструкции предыдущих запросов;
  • функция «Пометки» наглядно показывает результат поиска по заданной конструкции и позволяет быстро внести правки:

функция «Пометки» наглядно показывает результат поиска по заданной конструкции и позволяет быстро внести правки

2. Проверяем знания регулярных выражений в Regex

Онлайн-сервис regex101.com позволяет ввести набор данных и регулярное выражение. После этого в наборе данных подсветятся строки, соответствующие выражению. В специальном окне Explanation регулярное выражение разбирается по частям:

В специальном окне Explanation регулярное выражение разбирается по частям

Давайте потренируемся: задача — подсветить всю строку полностью. Нужно поставить галочку напротив «multi line».

Нужно поставить галочку напротив «multi line»

https://www.site.ua/www.site.com/search?q=widget+thinger https://www.site.com/page1/page2/page3/https://www.site.com/index.php https://www.site.com/products/100.php https://www.site.us/products/101.php https://www.site.com/products/102.php https://www.site.ua/duals/index.html https://www.site.com/ourteam/index.phphttps://www.site.com/ https://site.com/profilehttps://www.site.ru/ua/index.php https://www.site.com/ua/producty/100.php https://www.site.com/ua/producty/101.php https://www.site.com/ua/producty/102.php https://1.site.com/search?q=widget https://www.site.com/search?q=widget+thinger https://www.site.com/search?q=smidges https://www.site.com/index/yy.jpg

Регулярные выражения для проверки знаний:

  • выбрать все страницы;
    • (.*) — любое количество любых символов;
    • выбрать все страницы с https;
      • ^https.* — все URL, начинающиеся с https;
      • все страницы на украинском языке;
        • .*/ua/.* — все страницы, в URL которых содержится /ua/. Если использовать просто ua, в выборку попадет https://www.site.com/duals/index.html, это лишнее;
        • все индексные страницы;
          • .*index.(php|html) — аналогично прошлому выражению, нельзя просто использовать index;
          • все карточки товаров (для русской и украинской версий);
            • .*product(s|y).* или .*product[sy].* — оба варианта подходят.

            3. Тестируем регулярные выражения с помощью Jsfiddle

            Jsfiddle — инструмент для экспериментов с JavaScript. В нем можно проверить условия для запуска функции или демонстрации нужных результатов.

            В этом примере видно, как на основании регулярных выражений сначала определяется, является ли нажатый элемент ссылкой на файл .pdf или .jpg. После этого для элементов, которые не являются ссылками на файлы, определяются название и цена товара. Все это выясняется, исходя из текстового содержимого элементов.

            4. Проверяем ошибки в регулярных выражениях с помощью Google Analytics

            Самый быстрый способ проверить знания о регулярных выражениях в Google Analytics — фильтры в стандартных отчетах. Зайдите в свой аккаунт и в любом отчете, где доступны фильтры, попробуйте отобрать какой-либо набор данных.

            5. Нестандартные методы освоения регулярных выражений

            Для тех, кто любит интерактив:

            • решаем кроссворды;
            • многоуровневая задачка.

            Жадные и ленивые кванторы

            Кванторы в регулярных выражениях позволяют определить часть шаблона, которая должна повторяться несколько раз подряд. «Жадный» квантор старается захватить наибольший кусок текста, который только может. А «ленивая» версия (добавляется символ-модификатор «?») ищет наименьшее из возможных вхождений.

            Жадный квантор (*) захватывает все — от первых кавычек до последних:

            Жадный квантор

            Ленивая версия квантора (*?) ищет наименьшее совпадение, поэтому найдет каждую подстроку по отдельности:

            Ленивая версия квантора

            Где использовать регулярные выражения

            SEO-специалисты прибегают к регулярным выражениям при работе с Google Analytics, RewriteRule в .htaccess, в текстовых редакторах, при работе с краулерами (Netpeak Spider).

            Расскажу о нескольких регулярных выражениях, которые часто мне помогают.

            1. Выделить всё, кроме домена:

            Использую, когда есть большой список URL-адресов (например, внешних ссылок) и для анализа нужно вычленить только домен. В NotePad++ с помощью функции замены меняю на пустую строку и получаю чистый список доменов:

            с помощью функции замены меняю на пустую строку и получаю чистый список доменов

            2. Выделить URL заданной вложенности:

            .*://site.com/.*?/.*?/.*?/

            Здесь конструкция (/.*?/) обозначает один уровень вложенности.

            Использую это выражение, когда нужно задать максимально разрешенную вложенность URL при сканировании сайта в Netpeak Spider.

            Чтобы просканировать все URL адреса только первого уровня вложенности, в сервисе нужно задать такие настройки:

            Чтобы просканировать все URL адреса только первого уровня вложенности, в Netpeak Spider нужно задать следующие настройки

            Что еще почитать о регулярных выражениях

            • 8 полезных регэкспов с наглядным разбором;
            • Некоторые ошибки при написании регэкспов;
            • Регулярные выражения, пособие для новичков (первая, вторая часть);
            • Истинное могущество регулярных выражений;
            • Шпаргалка по регулярным выражениям и объяснения к шпаргалке.

            Выводы

            Регулярные выражения — полезный, мощный и совершенно бесплатный инструмент для обработки строковых данных и упрощения работы в различных сервисах.

            Его достаточно сложно освоить, ещё сложнее научиться правильно применять. Взамен этот инструмент существенно облегчит вашу работу и сделает её гораздо эффективнее.

            Набросаем любимых регулярных выражений в комментариях?

            Начал интересоваться SEO в 2014 году, в Netpeak — c 2015 года. Работаю с крупными информационными порталами и сервисами.
            Сертифицированный специалист Google Analytics, Google Ads.

            Узнайте больше

            285

            Регулярные выражения: начало работы с RegExp

            Объяснение регулярных выражений для новичков на понятных примерах, а также перечень инструментов для удобного составления регекспов.

            Что такое регулярные выражения?

            Давайте разберёмся, что же собой представляют регулярные выражения. Если вам когда-нибудь приходилось работать с командной строкой, вы, вероятно, использовали маски имён файлов. Например, чтобы удалить все файлы в текущей директории, которые начинаются с буквы “d”, можно написать rm d* .

            Регулярные выражения представляют собой похожий, но гораздо более сильный инструмент для поиска строк, проверки их на соответствие какому-либо шаблону и другой подобной работы. Англоязычное название этого инструмента — Regular Expressions или просто RegExp. Строго говоря, регулярные выражения — специальный язык для описания шаблонов строк.

            Реализация этого инструмента различается в разных языках программирования, хоть и не сильно. В данной статье мы будем ориентироваться в первую очередь на реализацию Perl Compatible Regular Expressions.

            Основы синтаксиса

            В первую очередь стоит заметить, что любая строка сама по себе является регулярным выражением. Так, выражению Хаха , очевидно, будет соответствовать строка “Хаха” и только она. Регулярки являются регистрозависимыми, поэтому строка “хаха” (с маленькой буквы) уже не будет соответствовать выражению выше.

            Однако уже здесь следует быть аккуратным — как и любой язык, регекспы имеют спецсимволы, которые нужно экранировать. Вот их список: . ^ $ * + ? < >[ ] \ | ( ) . Экранирование осуществляется обычным способом — добавлением \ перед спецсимволом.

            Набор символов

            Предположим, мы хотим найти в тексте все междометия, обозначающие смех. Просто Хаха нам не подойдёт — ведь под него не попадут “Хехе”, “Хохо” и “Хихи”. Да и проблему с регистром первой буквы нужно как-то решить.

            Здесь нам на помощь придут наборы — вместо указания конкретного символа, мы можем записать целый список, и если в исследуемой строке на указанном месте будет стоять любой из перечисленных символов, строка будет считаться подходящей. Наборы записываются в квадратных скобках — паттерну [abcd] будет соответствовать любой из символов “a”, “b”, “c” или “d”.

            Внутри набора большая часть спецсимволов не нуждается в экранировании, однако использование \ перед ними не будет считаться ошибкой. По прежнему необходимо экранировать символы “\” и “^”, и, желательно, “]” (так, [][] обозначает любой из символов “]” или «[», тогда как [[]х] — исключительно последовательность “[х]”). Необычное на первый взгляд поведение регулярок с символом “]” на самом деле определяется известными правилами, но гораздо легче просто экранировать этот символ, чем их запоминать. Кроме этого, экранировать нужно символ «-», он используется для задания диапазонов (см. ниже).

            Если сразу после [ записать символ ^ , то набор приобретёт обратный смысл — подходящим будет считаться любой символ кроме указанных. Так, паттерну [^xyz] соответствует любой символ, кроме, собственно, “x”, “y” или “z”.

            Итак, применяя данный инструмент к нашему случаю, если мы напишем [Хх][аоие]х[аоие] , то каждая из строк “Хаха”, “хехе”, “хихи” и даже “Хохо” будут соответствовать шаблону.

            Предопределённые классы символов

            Для некоторых наборов, которые используются достаточно часто, существуют специальные шаблоны. Так, для описания любого пробельного символа (пробел, табуляция, перенос строки) используется \s , для цифр — \d , для символов латиницы, цифр и подчёркивания “_” — \w .

            Если необходимо описать вообще любой символ, для этого используется точка — . . Если указанные классы написать с заглавной буквы ( \S , \D , \W ) то они поменяют свой смысл на противоположный — любой непробельный символ, любой символ, который не является цифрой, и любой символ кроме латиницы, цифр или подчёркивания соответственно.

            Также с помощью регулярных выражений есть возможность проверить положение строки относительно остального текста. Выражение \b обозначает границу слова, \B — не границу слова, ^ — начало текста, а $ — конец. Так, по паттерну \bJava\b в строке “Java and JavaScript” найдутся первые 4 символа, а по паттерну \bJava\B — символы c 10-го по 13-й (в составе слова “JavaScript”).

            На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

            Диапазоны

            У вас может возникнуть необходимость обозначить набор, в который входят буквы, например, от “б” до “ф”. Вместо того, чтобы писать [бвгдежзиклмнопрстуф] можно воспользоваться механизмом диапазонов и написать [б-ф] . Так, паттерну x[0-8A-F][0-8A-F] соответствует строка “xA6”, но не соответствует “xb9” (во-первых, из-за того, что в диапазоне указаны только заглавные буквы, во-вторых, из-за того, что 9 не входит в промежуток 0-8).

            Механизм диапазонов особенно актуален для русского языка, ведь для него нет конструкции, аналогичной \w . Чтобы обозначить все буквы русского алфавита, можно использовать паттерн [а-яА-ЯёЁ] . Обратите внимание, что буква “ё” не включается в общий диапазон букв, и её нужно указывать отдельно.

            Квантификаторы

            Вернёмся к нашему примеру. Что, если в “смеющемся” междометии будет больше одной гласной между буквами “х”, например “Хаахаааа”? Наша старая регулярка уже не сможет нам помочь. Здесь нам придётся воспользоваться квантификаторами.

            На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

            Обратите внимание, что квантификатор применяется только к символу, который стоит перед ним.

            Некоторые часто используемые конструкции получили в языке RegEx специальные обозначения:

            На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

            Таким образом, с помощью квантификаторов мы можем улучшить наш шаблон для междометий до [Хх][аоеи]+х[аоеи]* , и он сможет распознавать строки “Хааха”, “хееееех” и “Хихии”.

            Ленивая квантификация

            Предположим, перед нами стоит задача — найти все HTML-теги в строке

            Tproger — мой любимый сайт о программировании!

            Очевидное решение <.*>здесь не сработает — оно найдёт всю строку целиком, т.к. она начинается с тега абзаца и им же заканчивается. То есть содержимым тега будет считаться строка

            p>Tproger — мой любимый сайт о программировании! 

            Это происходит из-за того, что по умолчанию квантификатор работают по т.н. жадному алгоритму — старается вернуть как можно более длинную строку, соответствующую условию. Решить проблему можно двумя способами. Первый — использовать выражение <[^>]*> , которое запретит считать содержимым тега правую угловую скобку. Второй — объявить квантификатор не жадным, а ленивым. Делается это с помощью добавления справа к квантификатору символа ? . Т.е. для поиска всех тегов выражение обратится в <.*?>.

            Ревнивая квантификация

            Иногда для увеличения скорости поиска (особенно в тех случаях, когда строка не соответствует регулярному выражению) можно использовать запрет алгоритму возвращаться к предыдущим шагам поиска для того, чтобы найти возможные соответствия для оставшейся части RegExp. Это называется ревнивой квантификацией. Квантификатор делается ревнивым с помощью добавления к нему справа символа + . Ещё одно применение ревнивой квантификации — исключение нежелательных совпадений. Так, паттерну ab*+a в строке “ababa” будут соответствовать только первые три символа, но не символы с третьего по пятый, т.к. символ “a”, который стоит на третьей позиции, уже был использован для первого результата.

            Чуть больше о жадном, сверхжадном и ленивом режимах квантификации вы сможете узнать из статьи о регулярных выражениях в Java.

            Скобочные группы

            Для нашего шаблона “смеющегося” междометия осталась самая малость — учесть, что буква “х” может встречаться более одного раза, например, “Хахахахааахахооо”, а может и вовсе заканчиваться на букве “х”. Вероятно, здесь нужно применить квантификатор для группы [аиое]+х , но если мы просто напишем [аиое]х+ , то квантификатор + будет относиться только к символу “х”, а не ко всему выражению. Чтобы это исправить, выражение нужно взять в круглые скобки: ([аиое]х)+ .

            Таким образом, наше выражение превращается в [Хх]([аиое]х?)+ — сначала идёт заглавная или строчная “х”, а потом произвольное ненулевое количество гласных, которые (возможно, но не обязательно) перемежаются одиночными строчными “х”. Однако это выражение решает проблему лишь частично — под это выражение попадут и такие строки, как, например, “хихахех” — кто-то может быть так и смеётся, но допущение весьма сомнительное. Очевидно, мы можем использовать набор из всех гласных лишь единожды, а потом должны как-то опираться на результат первого поиска. Но как?…

            Запоминание результата поиска по группе

            Оказывается, результат поиска по скобочной группе записывается в отдельную ячейку памяти, доступ к которой доступен для использования в последующих частях регэкспа. Возвращаясь к задаче с поиском HTML-тегов на странице, нам может понадобиться не только найти теги, но и узнать их название. В этом нам может помочь регулярное выражение <(.*?)>.

            Tproger — мой любимый сайт о программировании!

            Результат поиска по всему регексу: “

            ”.
            Результат поиска по первой группе: “p”, “b”, “/b”, “i”, “/i”, “/i”, “/p”.

            На результат поиска по группе можно ссылаться с помощью выражения \n , где n — цифра от 1 до 9. Например выражению (\w)(\w)\1\2 соответствуют строки “aaaa”, “abab”, но не соответствует “aabb”.

            Если выражение берётся в скобки только для применения к ней квантификатора (не планируется запоминать результат поиска по этой группе), то сразу после первой скобки стоит добавить ?: , например (?:[abcd]+\w) .

            С использованием этого механизма мы можем переписать наше выражение к виду [Хх]([аоие])х?(?:\1х?)* .

            Перечисление

            Чтобы проверить, удовлетворяет ли строка хотя бы одному из шаблонов, можно воспользоваться аналогом булевого оператора OR, который записывается с помощью символа | . Так, под шаблон Анна|Одиночество попадают строки “Анна” и “Одиночество” соответственно. Особенно удобно использовать перечисления внутри скобочных групп. Так, например (?:a|b|c|d) полностью эквивалентно [abcd] (в данном случае второй вариант предпочтительнее в силу производительности и читаемости).

            С помощью этого оператора мы сможем добавить к нашему регулярному выражению для поиска междометий возможность распознавать смех вида “Ахахаах” — единственной усмешке, которая начинается с гласной: [Хх]([аоие])х?(?:\1х?)*|[Аа]х?(?:ах?)+

            Полезные сервисы

            Потренироваться и/или проверить регулярное выражение на каком-либо тексте без написания кода можно с помощью таких сервисов, как RegExr, Regexpal или Regex101. Последний, вдобавок, приводит краткие пояснения к тому, как регулярка работает.

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

            RegExp Builder — визуальный конструктор функций JavaScript для работы с регулярными выражениями.

            Больше инструментов можно найти в нашей подборке.

            Задания для закрепления

            Найдите время

            Время имеет формат часы:минуты. И часы, и минуты состоят из двух цифр, пример: 09:00. Напишите RegEx выражение для поиска времени в строке: “Завтрак в 09:00”. Учтите, что “37:98” — некорректное время.

Добавить комментарий

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