Регулярные выражения php двоеточие

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

Чтобы найти в строке какое-то совпадение, достаточно просто записать это совпадение внутри двух слэшей.

Её использование выглядит следующим образом:

Давайте приведём пример. Найдём, слово «век» в строке «человек».

Для того, чтобы быстрее составлять регулярки, есть онлайн-сервисы. Они позволяют не переписывать шаблон и запускать каждый раз код, а делать всё это прямо в браузере. Я неоднократно пользовался сервисом https://regex101.com/ и вам его рекомендую.

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Я ввёл в шаблон «/ку/» и строку «кукушка». В результате получил 2 совпадения.

Помимо этого у сервиса есть вкладка «Code generator», на которой вы сразу сможете получить готовый код на PHP для своего примера:
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Символы

Давайте теперь перейдём к более интересным примерам.

Давайте найдём такие совпадения для строки «кукушки не кушают шоколадки». Паттерн примет следующий вид: «/к./». То есть буква «к» и любой символ.

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Видим, что нашлось немало совпадений. Давайте добавим теперь после точки ещё одну букву «ш».

Теперь совпадения только два.
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Нужно найти несколько подряд идущих точек? Да не вопрос! Заэкранируйте их все:
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

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

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Если что-то должно повториться точное число раз, например, 3, то пишется просто <3>.

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

Немного примеров:
Символ точки, повторяющийся от одного и более раз
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Восклицательный знак, перед которым либо есть вопросительный знак, либо нет
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Модификаторы

Глобальный поиск

А не обратили ли вы внимание на букву g после закрывающего слеша в паттерне?
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Видите? Теперь только одно совпадение осталось.

Жадность

Есть ещё один довольно популярный модификатор, который позволяет сделать поиск либо жадным, либо нежадным. Жадный поиск захватывает максимально возможную подстроку. Давайте рассмотрим вот такой пример:
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Видите, какую строку захватило? А если бы нам хотелось остановиться на первой букве «к»? Тогда нам просто нужно было бы сделать поиск нежадным. Для этого используется модификатор «U»
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

В PHP он при этом указывается после закрывающего слеша паттерна:

Вообще, все остальные модификаторы как и «U» указываются после слеша, это только для модификатора g пришлось сделать две разные функции.

Итак, давайте сформулируем основные тезисы по жадности и нежадности:

Классы символов

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

Когда вы используете такой класс в шаблоне, это соответствует одному из символов из этого шаблона. Не нескольким, а одному из них! Чтобы было несколько, нужно использовать квантификаторы.

Пример: двоеточие, после которого идут три цифры от 0 до 3
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Если нужно сделать отрицание, то внутри таких кавычек перед остальными ставится символ «^».

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

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

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Якоря в регулярных выражениях

Также нам часто приходится говорить о начале строки. Для этого есть якорь «^».
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Несмотря на то, что в строке есть два слова «кукушки», под шаблон попало только первое, так как оно находится в начале строки.

Давайте вернёмся к примеру с телефонами. В прошлый раз мы использовали шаблон «/+77<10>/». Однако, если строка содержит больше цифр в конце, то она просто отбросит лишнее.
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

По сути, этот телефон некорректный. Однако, с помощью якорей мы можем сделать так, что в строке будет только телефон, без лишней лабуды. Некорректный телефон не попадает в совпадение:
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

А корректный попадает:
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Многострочный режим

Если мы сейчас запишем несколько телефонов в разных строках, то не один не подпадёт под эту регулярку.
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

«ИЛИ» в регулярках

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

Маски

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

Пример задачи: нужно из строки Меняем автора статьи 123 c «Иван» на «Пётр» извлечь идентификатор статьи и имена авторов.

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

Нагляднее всего это можно увидеть на примере:
Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Видите, справа у нас появились дополнительные совпадения? В PHP мы можем сделать из этого отдельные переменные!

Делается это проще простого:

Соответственно, нам остаётся лишь определить переменные под всё это дело:

А ещё маске можно дать имя прямо в шаблоне, вот так:

В коде будет выглядеть вот так:

И мы можем получить id статьи вот так:

Ещё один реальный пример

Практически на любом современном сайте все адреса вида: https://php.zone/post/892

Дальше он ищет статью в базе данных с таким идентификатором и возвращает её пользователю.

Это далеко не вся инфа о регулярках, но этого достаточно для 95% решения реальных задач. Забивать голову остальным и упарываться не советую 🙂

Домашка

У вас есть переменная

С помощью регулярных выражений выдерните из этой переменной 2 значения и положите их в переменные:

Источник

Как добавить знаки:
точка, запятая, двоиточие, точка с запятой, восклицательный знак, вопрос, косая черта
в эти регулярные выражения
1 первое проверяет строку на наличие других знаков
(допустимы только англ символы цифры и пробел)
2 второе удаляет ненужные знаки
(оставляет только англ и русские буквы, цифры и пробел)

нужно добавить разрешенные символы

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

k-2, не знаю, что у вас не работает. Приведите пример строки для которой не работает эта регулярка.

P.S. Запятая, двоеточие и точка с запятой не являются спецсимволами в регулярках, их можно не экранировать.

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

вот эти строки не проходят

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

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

k-2, регулярка в условии preg_match(‘/^[a-zA-Z0-9:\s]+$/’,$EN[$keyR]) у вас будет выдавать true при наличии в строке любого из указанных символов. Такая регулярка preg_match(‘/^[a-zA-Z0-9\. ;\/\s]+$/’,$EN[$keyR]) тоже будет работать и искать соответствующие символы.

Попробуйте так же убрать начало и конец строки, тут это особо роли не играет: preg_match(‘/[a-zA-Z0-9\. ;\/\s]+/’,$EN[$keyR])

Вторая регулярка соответственно так же должна работать в таком виде:

Источник

Регулярные выражения. Всё проще, чем кажется

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

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

Содержание

Что такое регулярка и с чем ее едят?

Где писать регулярки?

Самые простые регулярки

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

Lookahead и lookbehind (опережающая и ретроспективная проверки)

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

Что такое регулярка и с чем ее едят?

Если по простому, регулярка- это некий шаблон, по которому фильтруется текст. Мы можем написать нужный нам шаблон (регулярку) и таким образом искать в тексте необходимые нам символы, слова и т.д. Также их используют, например, при заполнении поля E-mail на различных сайтах, т.е. создают шаблон по типу: someEmail@gmail.com. Это я взял как пример, не более. Теперь, разобравшись, что это, приступим к изучению. Обещаю, скучно не будет)

Где писать регулярки?

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

Сразу дам ссылку на сайт, чтобы вы могли уже писать вместе со мной https://www.regextester.com/

Коротко о том, как пользоваться сайтом. Сверху, в графе Regular Expression вы пишете само регулярное выражение, а под ним, в графе Test String вы пишете строку, которую вы хотите фильтровать. Если были найдены соответствия между регулярным выражением и текстом, в тексте эти соответствия будут помечены синим цветом, вы их сразу увидите, даже не сомневайтесь.

Самые простые регулярки

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

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточиеПример регулярки

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

Шутка конечно, это далеко не всё. Например, мы можем написать одну букву t, и он найдет все буквы t в тексте.

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

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

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

Понимаю, звучит страшно, но на деле все просто. Сейчас разберемся.

С помощью квантификаторов мы можем указывать сколько раз должен повторяться тот или иной символ (ну или группа символов). Ниже приведу список квантификаторов с пояснением, а дальше попрактикуемся с ними.

— символ повторяется ровно n раз

— символ повторяется в диапазоне от m до n раз

— символ повторяется минимум m раз (от m и более)

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Почему же он взял еще ssss? Он взял не совсем его, а лишь его часть, так как в нем тоже есть 3 буквы s подряд. Дело в том, что регулярка не будет учитывать, отдельное это слово или нет. Пробелы тоже идут как символы! Поэтому будет выбран любой фрагмент, которому соответствует 3 идущие подряд буквы s

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Интересный момент получается, он выбрал все. Почему же? Ответ: та же ситуация, что и в прошлый раз. Он увидел ssss, взял 3 идущие подряд s вместе и еще одну s, которая рядом, ведь она тоже соответствует регулярку (а ведь мы помним, что мы указали диапазон от одного до трех раз)

Ну и напоследок, давайте напишем шаблон, где символ s будет повторяться минимум три раза. Для этого напишем следующее: s ( <3,>обозначает, что символ s будет повторяться от трех раз и до бесконечности).

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

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

Есть уже готовые квантификаторы, которые обозначаются спец. символами. Вот они:

Давайте разбираться. Начнем со знака вопроса. Допустим у нас есть строка colour color и мы хотим найти либо colour, либо color. Мы можем написать так: colou?r.

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Давайте изменим строку и напишем что-то по типу colouuuuur color. И допустим мы хотим указать, что u должен либо не быть, либо быть сколько угодно раз. Для этого мы можем написать colou*r.

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

То есть либо u у нас нет, либо повторяется много раз.

Символ + работает почти также, за исключением того, что символ должен повторяться минимум 1 раз. То есть в данном случае слово color не будет соответствовать, так как там u не присутствует (то есть повторяется 0 раз, а у нас символ должен повторяться минимум 1 раз)

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

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

Теперь поговорим о специальных символах, которые используются в регулярках. Тут все очень просто, так что можете сильно не переживать. Скрины прикреплять буду здесь не везде (тогда статья разрастется до безумных размеров). Так что заранее прошу меня понять и простить и попробовать сами.

Поговорим об одиночном символе. Это значит, что будет выбираться любой символ, который повторяется только один раз. Например, вернемся к нашей строке Some text и выберем букву t, после которой идет любой символ. Для этого напишем t.

Выберется te, так как после t идет один любой символ (в данном случае е)

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

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

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Теперь давайте сделаем наоборот и возьмем последнюю букву t. Для этого напишем t$. Важно, чтобы символ $ стоял после нужного нам символа.

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

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

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Теперь идут, простые вещи. \d у нас обозначает любую цифру. Например в тексте some text123, если написать \d у нас будут выделяться только цифры.

\D делает все наоборот: берутся все символы, кроме цифр. То есть, если написать \D будет браться все, кроме цифр (и пробелы, кстати, тоже).

\w берет буквы, а \W берет, все, кроме букв (в том числе и пробелы).

Теперь расскажу про еще одно применение символа ^. Его можно использовать как отрицание, тем самым исключая символ или группу символов. Например, в слове test мы хотим выбрать все, кроме буквы t и для этого мы можем написать так: [^t]

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Именно в такой последовательности символ ^ будет обозначать отрицание.

Lookahead и lookbehind (опережающая и ретроспективная проверки)

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

Также мы можем сделать наоборот и выбрать символ s, если после него НЕ идет символ d. Для этого вместо знака равно мы должны поставить восклицательный знак (!), т.е. написать вот так: s(?!d)

Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Теперь поговорим о lookbehind. Допустим, у нас есть строка s ws ds ts es и мы хотим выбрать символ s, до которого будет символ d. Для этого мы можем написать так: (? Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

Почему же lookbehind подчеркивается красной линией? Дело в том, что lookbehind не всегда поддерживается и не везде такая регулярка будет работать. Нужно искать способ заменить этот lookbehind, но это зависит от поставленной задачи, поэтому нельзя сказать, как именно ее заменять. Будем надеяться, что в скором временем будет полная поддержка этой возможности.

Чтобы сделать наоборот, то есть выбрать все символы s, до которых НЕ будет идти символ d, нужно опять же поменять знак равно на восклицательный знак: (? Регулярные выражения php двоеточие. Смотреть фото Регулярные выражения php двоеточие. Смотреть картинку Регулярные выражения php двоеточие. Картинка про Регулярные выражения php двоеточие. Фото Регулярные выражения php двоеточие

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

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

Здесь мы создаем строку с текстом, который хотим проверить, создаем объект класса Regex и в конструктор пишем нашу регулярку (как я и говорил, я не буду заострять внимание на том, что такое объект класса и конструктор). Потом создаем объект класса MatchCollection и от объекта regex вызываем метод Matches и в параметры передаем нашу строку. В результате все сопоставления будут добавляться в коллекцию matches.

Java

Здесь похожая ситуация. Создаем объект класса Pattern и записываем нашу строку. CASE_INSENSITIVE означает, что он не привязан к регистру (то есть нет разницы между заглавными и строчными символами). Создаем объект класса Matcher и пишем туда регулярку.

JavaScript

Здесь тоже все просто. Вы создаете объект regex и пишете туда регулярку. И затем просто создаете объект matches, который будет являться коллекцией и вызываете метод exec и в параметры передаете строку.

Заключение

Итак, мы разобрали, что такое регулярные выражения, где они используются, как их писать и использовать в контексте языков программирования. Скажу сразу, написание регулярок приходит с опытом. Практикуйтесь, и я уверен: все у вас получится! А на этом я с вами прощаюсь. Спасибо за внимание и приятного всем дня)

Источник

Работа с регулярными выражениями на PHP. Глава 2

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Абстрактные классы и интерфейсы

Трейты

ООП Магия

Практика

Практика: классы как набор методов

Фигурные скобки

Операторы ‘+’, ‘*’, ‘?’ не слишком универсальные (хотя и используются очень часто). А если нам нужно указать конкретное число повторений?

На помощь придет оператор <>, указывающий количество повторений.

В данном случае шаблон поиска выглядит так: буква ‘x’, буква ‘a’ один или два раза, буква ‘x’.

В данном случае шаблон поиска выглядит так: буква ‘x’, буква ‘a’ два раза и более, буква ‘x’.

В данном случае шаблон поиска выглядит так: буква ‘x’, буква ‘a’ два раза, буква ‘x’.

Данную задачу, конечно же, можно решить и так (здесь это будет даже короче):

А вот так работать не будет:

Мы хотели такой шаблон: буква ‘x’, буква ‘a’ два раза и меньше, буква ‘x’, но, к сожалению, такое не работает.

Нужно указать явно:

Вот теперь получим то, что хотели.

Обратите внимание на то, что ноль тоже допустим:

В данном случае шаблон поиска выглядит так: буква ‘x’, буква ‘a’ ноль, один или два раза, буква ‘x’.

Группы символов \s, \S, \w, \W, \d, \D

Существуют специальные команды, которые позволяют выбрать сразу целые группы символов. Например, \d означает ‘цифра от 0 до 9’, а \D – наоборот, ‘не цифра’. Посмотрите примеры:

В данном примере шаблон поиска выглядит так: цифра от 0 до 9 один или более раз.

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

А теперь все будет наоборот: все что угодно, но не цифра от 0 до 9, один или более раз.

Что обозначают разные группы символов:

СимволЕго значение
\sОбозначает пробел или пробельный символ (имеется ввиду перевод строки, табуляция и т.п.)
\SНе пробел, то есть всё, кроме \s.
\wЦифра или буква (внимание: сюда не входит кириллица! Это можно исправить с помощью функции setlocale при большом желании.)
\WНе цифра и не буква.
\dЦифра от 0 до 9.
\DНе цифра от 0 до 9.

В данном примере шаблон поиска выглядит так: пробельный символ один раз.

В данном примере шаблон поиска выглядит так: НЕ пробельный символ один или более раз. Все подстроки, разделенные пробелами, заменятся на ‘!’.

В данном примере шаблон поиска выглядит так: цифра или буква один или более раз. Все подстроки, состоящие из цифр и букв, заменятся на ‘!’.

Квадратные скобки ‘[‘ и ‘]’

Группы символов \s, \S, \w, \W, \d, \D не очень гибкие. Даже такая простая задача, как найти все буквы (но не цифры) не может быть решена ими. Давайте посмотрим, что еще могут предложить нам регулярные выражения.

А предлагают они нам квадратные скобки ‘[‘ и ‘]’, которые представляют собой операцию ‘или’:

Но этим их возможности далеко не исчерпаны. С помощью шляпки ‘^’ мы можем сделать отрицание:

Что можно еще:

Особенности:

Можно не убирать шляпку с первого места, а просто заэкранировать ее с помощью обратного слеша, и она станет обозначать саму себя:

Как с этим бороться: поставьте символ дефиса там, где он точно не будет воспринят как символ группы, например, в начале или в конце (то есть после [ или перед ]):

Можно сделать и так:

Это работает, так как символы ‘z-0’ не могут образовать группу, ведь буква ‘z’ уже входит в группу ‘a-z’. Но лучше так не рисковать (мало ли что), а просто ставить дефис в начале или в конце.

. Спецсимволы внутри [ ] становятся обычными символами (значит их не надо экранировать обратным слешем!).

. Еще исключение: группы символов \s, \S, \w, \W, \d, \D (и другие аналогичные) будут обозначать именно группы, то есть по-прежнему будут командами.

. Операторы повторений записываются сразу после [ ] (их не надо брать в круглые скобки):

Шаблон поиска такой: точка или буква ‘a’ один или более раз, потом две буквы ‘x’.

Иногда один и тот же эффект можно получить и группами \s, \S, \w, \W, \d, \D, и скобками []. Когда пользоваться группами, а когда []?

Пользуйтесь тем, что записывается короче и выглядит проще: \w проще, чем [a-zA-Z], а \d – короче, чем 2. Хотя вторые варианты могут быть нагляднее (2 сразу понятно, а \d – еще нужно вспомнить, что это).

Особенности кириллицы

Первое: кириллица не входит в \w, нужно делать так: [а-яА-Я].

Обратите внимание на модификатор ‘u’.

По непонятным мне причинам кириллица может работать корректно и без модификатора u, а иногда и не работать. PHP такой PHP.

Начало ‘^’ и конец ‘$’ строки

Существуют специальные символы, которые обозначают начало ‘^’ или конец строки ‘$’. Посмотрите примеры:

Шаблон поиска такой: заменить ‘aaa’ на ‘!’ только если оно стоит в начале строки.

Шаблон поиска такой: заменить ‘aaa’ на ‘!’ только если оно стоит в конце строки.

Шаблон поиска такой: буква ‘a’ повторяется один или более раз, заменить всю строку на ‘!’ только она состоит из одних букв ‘a’.

‘Или’ через вертикальную черту |

Квадратные скобки не единственный вариант сделать ‘или’: существует еще вариант через вертикальную черту ‘|’:

Шаблон поиска такой: в начале стоит или ‘a’, или ‘b’ один или более раз, а потом две буквы ‘x’.

Для простых вещей ‘|’ лучше не использовать: сравните (a|b|c) или [abc] – второй вариант короче.

Конец или начало слова \b, \B

Давайте посмотрим на практическое применение данной команды:

Шаблон поиска такой: начало слова, маленькие латинские один или более раз, конец слова. Таким образом, регулярка найдет все слова и заменит их на ‘!’.

В принципе, похожую вещь можно сделать и без \b (регулярка даже проще):

Шаблон поиска такой: один или более НЕ пробелов заменить на ‘!’. Но иногда все же без \b не обойтись.

Проблема обратного слеша

Шаблон поиска такой: обратный слеш один раз.

Обратите внимание: здесь + действует аж на 4 символа перед ним без группировки:

Шаблон поиска такой: обратный слеш один или более раз.

Количество замен в preg_replace

Функция preg_replace имеет 4-тый необязательный параметр, который указывает, сколько замен произвести:

Функция произвела только две замены, все остальное не заменилось (‘aaa’ и ‘aaaa’ попали под регулярку но не поменялись на ‘!’).

Ну, а теперь 3 замены. Принцип, я думаю, ясен.

Что вам делать дальше:

Приступайте к решению задач по следующей ссылке: задачи к уроку.

Источник

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

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