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

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

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

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

00:00 – 02:37 Вступление. Повестка и цели вебинара.
02:38 – 04:35 История возникновения регулярных выражений
04:36 – 10:54 Что такое регулярные выражения? Определение. Пример пасинга лога
10:55 – 14:37 Синтаксис регулярных выражений. Обычные (литералы) и специальные символы. Экранирование специальных символов.
14:38 – 17:09 Наборы символов (классы); 5, [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 Последовательности . *, +, ?
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 Ответы на вопросы

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

Читайте также:  Рекурсивный обход бинарного дерева python

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

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

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

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

 ^.*(WARN|ERROR).*\((.*):(\d=)\)$ $1 in class $2 in line $33 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 \9 1 цифры \D [^\d] не цифры \s [\f\n\r\t\v] пробельный символ \S [^\s] не пробельный символ \w [\da-zA-Z_] буквенный символ \W [^\w] не буквенный символ 

Позиция

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

 Рыжик - это кот. Рыжик - это кот кот по имени Рыжик. 

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

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

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

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

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

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

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

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

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

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

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

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

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

 Кот, который гулял сам по себе 

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

 Кот, который сам по себе гулял 

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

Последовательности

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

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

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

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

* — ноль или более символов
+ — один или более символов
? — ноль или один символ

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

Перебор

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

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

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

 044 - 1234 asdf 123 asdf 1234 ^[tT]ele\d$ 

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

 ([mM]y name is|I am)\s[Mm]ykhailo [Pp]oliarush 
 My name is Mykhailo Poliaruhs I am mykailo Poliaruhs 

Задачи

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

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

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

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

Источник

Как добавить знаки [., :; !? /] в регулярное выражение?

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

//1 preg_match('/^[a-zA-Z0-9\s]+$/', $a) //2 preg_replace('/[^a-zA-ZА-Яа-я0-9\s]/u', '', $b )

K-2

preg_match(‘/^[a-zA-Z0-9\.\,\:\;\/\s]+$/’, $a)
я пробовал так, но не работает.
двоиточие, если оно в конце строки было, срабатывало. а если в середине строки — нет
видимо нужно как то иначе добавлять

K-2

вот тут я нашел, тут отдельные квадратные скобки поставили, но я не могу понять остальных символов, и как это все объединить
Как добавить знаки к выборке регулярного выражения?

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

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

K-2

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

K-2

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

k-2, все эти строки подходят под вашу регулярку — https://regex101.com/r/UWdFV7/1
В том посте, на который вы даете ссылку, используется логическое «или» — символ |
Напишите конкретно, что вам нужно. Я просто не понимаю какого результаты вы хотите добиться.

K-2

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

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])

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

preg_replace('/[^a-zA-ZА-Яа-я0-9\. ;\/\s]/u', '', strip_tags($valR))

Источник

Оцените статью