Шпаргалка по регулярным выражениям PHP

Шпаргалка по регулярным выражениям

^ — Начало строки
$ — Конец строки
. — Любой символ кроме переводов строки (без параметра /…/s)
[ …

] — Любой из перечисленного набора символов. Внутри квадратных скобок не работают другие операторы, но можно пользоваться метасимволами. С помощью дефиса можно указывать наборы символов: от первого до последнего. Например, [a-f] означает любую букву из числа a, b, c, d, e, f.
[^ … ] — Ни один из перечисленного набора символов. Внутри квадратных скобок не работают другие операторы, но можно пользоваться метасимволами. С помощью дефиса можно указывать наборы символов: от первого до последнего. Например, [^0-9] означает любой символы, кроме 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
\# — Следующий за слэшем символ # (кроме a-z и 0-9). Например, \\ означает символ \, \. означает символ . (точка), \$ означает символ $ и т. д.
\b — Начало слова
\B — Конец слова
[[:alnum:]] — буквенно-цифровые символы
[[:digit:]] — десятичные цифровые символы
[[:xdigit:]] — шестнадцатеричные цифровые символы
[[:alpha:]] — буквенные символы
[[:upper:]] — прописные буквенные символы
[[:lower:]] — строчные буквенные символы
[[:punct:]] — знаки пунктуации
[[:space:]] — символы пробела
[[:blanc:]] — символы табуляции и пробела
[[:print:]] — печатные символы
[[:cntrl:]] — управляющие символы
[[:graph:]] — печатные символы, за исключением пробельные

\xNN — NN — шестнадцатеричный код ASCII-символа (\x20 — пробел, \x4A — J, \x6A — j и т. д.)
\t — символ табуляции
\n — новая строка
\r — перевод каретки
\а — перевод формата
\v — вертикальная табуляция
\a — звонок
\e — escape
\033 — восьмеричная запись символа
\x1A — шестнадцатеричная
\c — control символ
\l — нижний регистр следующего символа
\u — верхний регистр -//-
\L — все символы в нижнем регистре до \E
\U — в верхнем -//-
\E — ограничитель смены регистра
\Q — отмена действия как метасимвола

\w — алфавитно-цифровой или ‘_’ символ
\W — не -//-
\s — один пробел
\S — один не пробел
\d — одна цифр
\D — одна не цифра

\b — граница слова
\B — не граница слова
\A — начало строки для каждой строки в многострочной строке
\Z — конец строки для каждой строки в многострочной строке
\G — конец действия m//g

( … ) — Сгруппировать символы в один паттерн и запомнить
| — Предыдущий или следующий паттерн (логическое "ИЛИ")
* — Ноль или больше раз
+ — Один или больше раз
? — 0 или 1 раз предыдущая маска
{n} — Повторять n раз
{n,} — Повторять n или больше раз
{n,m} — Повторять от n до m раз
?#N — Это оператор "просмотра назад". N — число символов для просмотра.
?~N — Отрицание просмотра назад.
?= — Просмотр вперед.
?! — Отрицание просмотра вперед.

i — не различать строчные и заглавные буквы.
m — считать строку многострочной.
s — однострочная строка.
x — расширенный синтаксис ( использование пробелов и комментариев)
e — после выполнения стандартных подстановок в заменяемой строке интерпретирует ее как PHP-код и использует результат для замены искомой строки.
A — соответствие шаблону будет достигаться только в том случае, если он соответствует началу строки, в которой производится поиск.
D — метасимвол $ в шаблоне соответствует только окончанию обрабатываемых данных. Без этого модификатора метасимвол $ соответствует также позиции перед последним символом, в случае, если им является перевод строки (но не распространяется на любые другие переводы строк). Данный модификатор игнорируется, если используется модификатор m. В языке Perl аналогичный модификатор отсутствует.
S — если данный модификатор используется, проводится дополнительный анализ шаблона. В настоящем это имеет смысл только для фиксированных шаблонов, не содержащих переменных ссылок.
U — модификатор инвертирует жадность квантификаторов, таким образом они по умолчанию не жадные. Но становятся жадными, если за ними следует символ ‘?’. Такая возможность не совместима с Perl. Модификатор U также может использоваться внутри шаблона, при помощи ‘?U’ записи.
X — включает дополнительную функциональность PCRE, которая не совместима с Perl: любой обратный слеш в шаблоне, за которым следует символ, не имеющий специального значения, приводят к ошибке. Это обусловлено тем, что подобные комбинации зарезервированы для дальнейшего развития. По умолчанию же, как и в Perl, слеш со следующим за ним символом без специального значения трактуется как as опечатка. На сегодняшний день это все возможности, которые управляются данным модификатором
u — включает дополнительную функциональность PCRE, которая не совместима с Perl: шаблоны обрабатываются как UTF8 строки. Модификатор u доступен в PHP 4.1.0 и выше для Unix-платформ, и в PHP 4.2.3 и выше для Windows платформ.

(?#комментарий) — комментарий в теле шаблона.
(?:шаблон) — группировка как и ‘( )’, но без обратной ссылки
(?=шаблон) — "заглядывание" вперед.

Например /\w+(?=\t)/ соответствует слову, за которым идет табуляция, но символ ‘\t’ не включается в результат.

\ЧИСЛО — Ссылка внутри регэкспа на его же разобранную скобку, где ЧИСЛО — номер нужной группы (скобки). Этот оператор работает с некоторыми ограничениями на тип ссылаемого блока — он работает, только если в ссылаемой скобке нет операторов повторения.

Содержание

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

Автор: Артемьев Сергей Игоревич
ICQ: 438856621
email: _spin_@bk.ru

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

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

Я думаю, вы неоднократно сталкивались с ситуациями, когда у вас есть текст (например, в Microsoft Word) и вам надо найти в нём что-то важное. Если вы знаете, что именно ищете — всё просто: вызвали диалог поиска, ввели искомое слово, нажали кнопку и вуаля — текст найден.

Но что вы будете делать, если вы заранее знаете только тип искомой информации? Например, перед вами стоит задача найти все адреса электронной почты в документе на пару сотен листов. Некоторые будут просматривать документ вручную, некоторые — введут в поиске собаку (@) и будут искать её. Согласитесь — оба вариата это каторжный неблагодарный труд.

Вот тут-то на выручку приходят регулярные выражения.

В некотором приближении регулярные выражения можно сравнить с масками или шаблонами, которые накладываются на текст: если текст соответствует маске — значит это искомый фрагмент. Но перед тем как рассматривать применение регулярных выражений, мы познакомимся с их синтаксисом.

Регулярное выражение — это текстовая строка, составленная по определённым законам и правилам. Строка состоит из символов и групп символов, метасимволов, квантификаторов и модификаторов.

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

// читаемые символы a Е // нечитаемые символы и коды \x41 — то же что буква ‘A’ \x09 — символ табуляции

Группа символов — это несколько символов, записанные последовательно:

абвг ACZms

Сразу обращаю ваше внимание — "пробел" в регулярных выражения тоже рассматривается как значимый символ, поэтому при написании выражений будьте внимательны. Например, эти граппы символов являются РАЗНЫМИ выражениями:

АБВГДЕ АБВ ГДЕ

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

Метасимволы для задания специальных символов
() Скобки. Определяют вложенные выражения.
| Метасимвол выбора
^ Метасимвол начала строки
$ Метасимвол конца строки
\n Символ перевода строки (шестнадцатеричный код 0x0A)
\r Символ возврата каретки (шестнадцатеричный код 0x0D)
\t Символ табуляции (шестнадцатеричный код 0x09)
\xhh Вставка символа с шестнадцатиричным кодом 0xhh, например \x42 вставит латинскую букву ‘B’
Метасимволы для задания групп символов
. Точка. Любой символ.
\d Цифра (0-9)
\D Не цифра (любой символ кроме символов 0-9)
\s Пустой символ (обычно пробел и символ табуляции)
\S Непустой символ (все, кроме символов, определяемых метасимволом \s)
\w "Словарный" символ (символ, который используется в словах. Обычно все буквы, все цифры и знак подчеркивания (‘_’))
\W Все, кроме символов, определяемых метасимволом \w

Метасимволы из второй половины таблицы очень легко запомнить. "d" — digit (цифра), "s" — symbol (символ), "w" — word (слово). Если буква большая — значит надо добавить "НЕ" в описанию группы.

Возьмём для примера текст "На красной майке цифры 1812, а на зелёной майке — 2009". Рассмотрим примеры простейших регулярных выражений:

\d\d\d\d — найдёт 1812 и 2009 \D — найдёт все буквы, пробелы и знаки препинания \s — найдёт все пробелы в тексте.

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

[0-9] — означает любую цифру (то же, что \d) [0,2,4,6,8] — означает чётную цифру [A-Za-z0-9] — обозначает любой символ латниского алфавита (в любом регистре) или цифру.

Например, выражение \d\d\d[0,2,4,6,8] в тестовой строке найдёт только 1812, но не 2009. Это выражение следует читат как "найти все последовательности из четырёх цифр, где последняя цифра равна 0,2,4,6 или 8".

Нам осталось упомянуть лишь квантификаторы и модификаторы.

Квантификатор — это специальная конструкция, определяющая, сколько раз должен встретиться символ или группа символов. Квантификатор записывается в фигурных скобках "{}". Возможны два формата записи: точный и диапазонный. Точный формат записывается так:

{X}

Здесь Х — это количество раз, которое должен повториться предшествующий символ или группа. Например выражение

\d{4}

следует читать как "ровно четыре последовательно записанные цифры".

Вторая форма записи — диапазонная. Записывается как

{X, Y} // или {,Y} // или {X,}

где X — минимальное, а Y — максимальное количество повторений. Например:

\d{2,4}

читается как "от двух до четырёх последовательно записанных цифр". Если одна из границ не указана, то подразумевается отсутствие ограничения. Например:

\w{3,} — три и более букв. \d{,5} — цифр нет вообще, либо есть, но не более пяти.

Квантификаторы могут применяться как к одному символу, так и к группе:

[ А-Яа-я ]{1,3}

Эта конструкция выберет из текста все русские слова из одной, двух или трёх букв (например, "или", "не", "я", "иду" и т.п.)

Кроме фигурных скобок с уществует ещё три метасимвола-квантификатора: "*" (звёздочка), "+" (плюс) и "?" (вопрос). Их испльзуют в случаях, когда заранее неизвестно минимальное и максимальное количество необходимых повторений. Например, при поиске адресов электронной почты нельзя заранее сказать, сколько символов будет в имени пользователя (до "собаки"), а сколько — в имени домена (после "собаки").

Метасимвол "*" читается как "любое количество от нуля и более", т.е. конструкция

\w*

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

Символ "+" отличается от звёздочки лишь тем, что требует наличия хотя-бы одного символа. Т.е. конструкция

\d+

соответствует любой цифровой последовательности, где цифр одна или более.

Символ "?" соответствует отсутствию или наличию единственного символа. Т.е. конструкция

\d?

соответствует любой цифровой последовательности, где цифр одна или две.

Здесь стоит упомянуть о такой особенности антификаторов "*" и "+" как жадность. Суть в том, что по-умолчанию эти символы соответствуют максимально длинной последовательности символов. Например, для строки "мама мыла раму" выражение:

\.+а

выберет "мама мыла ра", что несколько неожиданно, ведь мы предполагали получить "ма". Для изменения такого поведения используется метасимвол "?" (знак вопроса), записанный сразу после квантификатора. Он органичивает "аппетит" квантификаторов, заставляя их возвращать первое совпадение, а не самое длинное. Теперь изменим предыдущий пример:

\.+а?

и получим требуемое совпадение "ма".

Последний элемент языка — модификаторы. Модификатор — это спецсимвол, определяющий "системные" параметры анализа регулярных выражений. Таких символов всего четыре, они могут применяться как по отдельности, так и одновременно:

i Включает режим case-insensitive, т.е. большие и маленькие буквы в выражении не различаются.
m Указывает на то, что текст, по которому ведется поиск, должен рассматриваться как состоящий из нескольких строк.

По умолчанию механизм регулярных выражений рассматривает текст как одну строку вне зависимости от того, чем она является на самом деле. Соответственно метасимволы ‘^’ и ‘$’ указывают на начало и конец всего текста. Если же этот модификатор указан, то они будут указывать соответственно на начало и конец каждой строки текста.

s По умолчанию метасимвол ‘.’ не включает в свое определение символ перевода строки. Т.е. для многострочного текста выражение /.+/ вернет только первую строку, а не весь текст, как ожидается. Указание этого модификатора снимает это ограничение.
U Делает все количественные метасимволы "не жадными" по умолчанию.

В некоторых модификациях языка (в частности в PHP) вместо "U" используется символ "g", более соответствующий смыслу ("g" — сокращение от английского "greedy", "жадный").

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

email [\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\ .A-Za-z0-9]{2,}
дата ^\d{1,2}([-. /])\d{1,2}\1\d{2,4}$
дробное число [\d]{4}\.[\d]{2}
номер мобильного телефона (?:8|\+7)? ?\(?(\d{3})\)? ?(\d{3})[ -]?(\d{2})[ -]?(\d{2})
Выделение текста между тегами /<tag>(.*)</tag>/Uis

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

Для работы с регулярными выражениями в PHP предназначены специальные функции, спосок которых и краткое описание приведены в таблице:

int preg_match (string pattern, string subject [, array matches])

Функция проверяет, совпадает ли содержимое subject с шаблоном pattern. Возвращает 1, если совпадения найдены, иначе возвращает 0. Если указать необязательный параметр-массив matches, то при выполнении функции в него будут занесен единственный элемент — первое найденное совпадение.

<?php // исходная строка $value = "abcde 12345 klmnop"; // шаблон для поиска $template = "/\w{5}/"; // производим поиск $result = preg_match($template, $value, $maches); echo "Совпадений: $result<br>"; print_r($found); ?>

int preg_match_all (string pattern, string subject, array matches [, int order])
Функция идентична предыдущей, с единственным отличием — она производит поиск по всему тексту и возвращает в массиве matches ВСЕ найденные совпадения.
mixed preg_replace (mixed pattern, mixed replacement, mixed subject [, int limit])
Как и обе предшествующие функции, preg_replace производит поиск фрагмента текста, соответствующего шаблону. Все найденные фрагменты функция заменяет на указанный в параметрах текст. <?php $text = "текст\t\n\t\t до замены \n \t и \n\n\n после замены"; echo "<b>До очистки:</b>\n$text\n\n"; $text = preg_replace("/(\n \s{2,})/"," ",$text); echo "<b>После очистки:</b>\n$text"; // выведет текст, очищенный от спецсимволов // и лишних пробелов ?>
mixed preg_replace_callback (mixed pattern, mixed callback, mixed subject [, int limit])
Функция является расширенной версией предыдущей. Главное отличие — этой функции в параметрах передаётся имя функции, которая будет анализировать текст и формировать замещающий текст.
array preg_split (string pattern, string subject [, int limit [, int flags]])
Эта функция аналогична функциям explode() и split(). Её особенность в том, что в качестве разделителя выступает не фиксированная строка, а регулярное выражение. Функция разбивает исходные данные на элементы и помещает их в выходной массив. <?php // загружаем текст из файла $text = join(»,file(‘my_text.txt’)); // разбиваем по словам $words = preg_split("/\s+/s",$text); // выводим результаты print_r($words); ?>
array preg_grep (string pattern, array input)
Функция предназначена для регулярного поиска в массивах. Для поиска задаётся шаблон и массив входных данных, а возвращается массив, состоящий только из элементов, соответствющих шаблону.

Рассмотренный список функций далеко не полон, но вполне достаточен для успешного начала работы с регулярными выражениями. Если вы заинтересовались этой темой — обязательно почитайте дополнительную литературу (например, книгу Фридла "Регулярные выражения"). Кроме того, в целях обучения рекомендую поставить одну из специальных программ для тестирования регулярных выражений (например, "PCRE" или "RegEx Builder").

В начало страницы

В начало страницы

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

Очень интересная тема, до которой у меня вечно не доходят руки. На практике почти не приходится использовать, но вещь безусловно полезная.

Для первого знакомства можно посмотреть видео Вебинар: Что такое регулярные выражения?

00:00 – 02:37 Вступление. Повестка и цели вебинара.
02:38 – 04:35 История возникновения регулярных выражений
04:36 – 10:54 Что такое регулярные выражения? Определение. Пример пасинга лога
10:55 – 14:37 Синтаксис регулярных выражений. Обычные (литералы) и специальные символы. Экранирование специальных символов.
14:38 – 17:09 Наборы символов (классы); [0-9], [Aa]
17:10 – 17:54 Специальные метасимволы-сокращения. \d \D \s \S \w \W
17:55 – 20:00 Указание позиции в поиске: начало и конец строки, начало и конец слова
20:01 – 20:24 Группировка a(bc|b|x)cc
20:25 – 27:30 Последовательности {m, n}. *, +, ?
27:32 – 30:29 Перебор “(a|c|z)”
30:30 – 34:07 Практические примеры. Как прочитать регулярное выражение?
34:07 – 35:59 Инструменты проверки регулярных выражений
36:00 – 42:19 Простые задачи, которые можно решить при помощи регулярных выражений: парсинг телефонных номеров, email, html тэгов
42:20 – 47:36 Примеры практического применения регулярных выражений. Найти все запущенные процессы по шаблону, все email адреса в файле.
47:37 – 50:33 Регулярные выражения в Notepad++ и Total Commander
50:34 – 56:59 Использование регулярных выражений в программировании: Python, Java, JavaScript
57:00 – 59:14 Применение регулярных выражений в автоматизации тестирования
59:15 – 1:01:31 Итоги.
1:01:32 – 1:09:45 Ответы на вопросы

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

Онлайн-сервисы

regexr.com

regexpal.com

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

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

Удобно работать с большим текстом.

В http://regexr.com/ пишем онлайн регулярное выражение, и нам сразу показывается, где эти строки.

Как вариант

Просто этим строчками меняем текст логов в удобный текст.

Обычный текст ищем как есть.

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

Экранирование

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

Их следует экранировать, т.е. поставить обратный слеш (\).

Для чего же он нужен? Рассмотрим простой пример. У нас есть строка с несколькими предложениями, в которых нам необходимо найти точки. Если вы попробуете это сделать, то будут выделены все символы. Дело в том, что точка является специальным метасимволом, которая заменяет любой символ в регулярном выражении, кроме переноса строки (см. ниже).

Нам следует указать, что точка в нашем случае должна быть не метасимволом, а обычным символом-точкой (\.). Экранируя любой метасимвол, мы превращаем его в обычный символ. Это относится и к самому обратному слешу, для экранирования используем \\.

Метасимвол точка

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

Создайте пример из трёх строк. Если мы добавим квантификатор + после точки (.+), то тем самым зададим поиск совпадающих символов от одного до бесконечности.

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

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

Мы знаем, что можно экранировать метасимвол точки, чтобы найти обычную точку.

Есть и другой способ — поместить точку в символьный класс, где она рассматривается как обычный символ: [.]+.

Использовать метасимвол точки полезно, когда есть строка с динамической составляющей, которая меняется. http://example.com/pictures/123/

Тогда для строки /pictures/123/, где числа 123 могут меняться, применим паттерн:

Мы экранировали слеши, ищем слово pictures, а также любые три символа (обязательно) после этого слова и слеша.

Наборы символов [Квадратные скобки]

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

Такой пример \/pictures\/[0-9]\/ будет находить строку /pictures/1/ (с одним символом), но не найдет /pictures/123/

Можно указать буквы [a-z] — любой символ алфавита.

Символ ^ означает НЕ — [^ae]

Можно указывать не диапазон, а просто указать нужные символы. Например, [19] (напоминаю, только один символ)

Тогда \/pictures\/[19]\/ найдет варианты /pictures/1/ и /pictures/9/

Есть готовые сокращения для диапазонов

Позиция

Если мы хотим найти какой-то конкретный текст, который заканчивается с определенным набором символов, то используется символ $

Тогда выражение кот$ найдет слово только во второй строке. В первой в конце есть точка. В третьей слово начинается, а не заканчивается.

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

Символ \b определяет границу слова, \B — не границу слова.

Например, выражение [A-Z] будет находить все заглавные буквы. В том числе по два символа в словах TextView, StatusBar, EditText

Если использовать \b[A-Z] то ищутся символы, которые является границей слова. Т.е.

будет находить первые заглавные буквы в указанных словах. Соответственно, \B[A-Z] наоборот найдет вторые заглавные буквы в этих словах.

Группировка (Круглые скобки)

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

В основном удобна для замены. Допустим мы ищем какое-то слово. Помещаем его в круглые скобки, таким образом мы определили группу. Это простейший вариант.

Допустим, нас интересует слово gray. Можно просто написать это слово целиком в качестве шаблона. Однако слово gray часто пишут несколько как grey. Это также допустимый вариант.

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

Мы можем таким образом создать несколько групп. При этом они нумеруются. Первая группа будет доступна в переменной под номером один — $1, вторая — $2 и т.д.

Создадим две группы. Теперь мы можем манипулировать этими группами. Для этого используем $1 и $2 для ссылки к этим группам. Тогда запись $2 $1 поменяет слова местами в тексте (режим Replace).

Для примера возьмём строку.

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

В режиме Replace пишем.

Теперь строка должна быть:

Можно использовать back reference, если мы знаем, что текст в группе повторяется. Тогда можно не писать (cat)(cat), а заменить на (back)\1

Последовательности {Фигурные скобки}

Последовательности задаются фигурными скобками.

Если использовать [A-Z] то найдутся большие заглавные буквы, но один раз. А выражение [A-Z]{1,4} указывает, что нужно показать все повторяющиеся символы от 1 до 4 раз. Можно указать точное значение [A-Z]{3} — найдет слова, где идут именно три заглавные буквы подряд.

До четырех символов [A-Z]{,4}
От четырех символов [A-Z]{4,}

Существует сокращения для них *, +, ?

* — {0,} ноль или более символов
+ — {1,} один или более символов
?

— {0,1} ноль или один символ

^.*слово$ — такое выражение найдет целую строку, которое заканчивается на слово.

Перебор

TExT|TEXT — найдет два варианта слова, которые написаны в разных регистрах. | — это или. Как вариант TE(x|X)T — третий символ мы определили в двух вариантах.

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

В круглых скобках идет набор символов. В квадратных скобках идет набор цифр от 0 до 9, который может повториться один раз. Дальше пробел, бесконечное количество символов. Потом снова пробел. Потом идут четыре цифры подряд, которые обязательно являются концом строки. Например.

Крышка — начало строки. Далее маленькая или большая буква T. Дальше три литерала. В конце строки должна быть цифра. Пример.

Разные вариации

Задачи

Телефонный номер 066.225-23-23

Три цифры, точка обязательно, три цифры, тире, две цифры, тире, две цифры.

Как вариант, можно было написать

parse http: http://host.com/parameters

parse email

html tag

hexidecimal color #aabbcc

Применение

UNIX — найти запущенные процессы из папки bin.
Найти все email в тексте

Notepad++ (47.40)

Java (54.35)

Реклама

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

Если статья вам понравилась, то можете поддержать проект.

Знак каретки и доллара имеют в регулярном выражении особый смысл. Их называют «якорями» (anchor – англ.).

Каретка совпадает в начале текста, а доллар – в конце.

Якоря являются не символами, а проверками.

До этого мы говорили о регулярных выражениях, которые ищут один или несколько символов. Если совпадение есть – эти символы включаются в результат.

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

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

Например, без каретки найдёт все числа:

А с кареткой – только первое:

Знак доллара используют, чтобы указать, что паттерн должен заканчиваться в конце текста.

Аналогичный пример с долларом для поиска числа в конце:

Оба якоря используют одновременно, если требуется, чтобы шаблон охватывал текст с начала и до конца.

Обычно это требуется при валидации.

Например, мы хотим проверить, что в переменной хранится именно десятичная дробь.

Ей соответствует регэксп . Но простой поиск найдёт дробь в любом тексте:

Наша же задача – проверить, что целиком соответствует паттерну .

Для этого обернём шаблон в якоря :

Теперь поиск ищет начало текста, за которым идёт число, затем точка, ещё число и конец текста. Это как раз то, что нужно.

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

Закрыть меню