Регулярные выражения PHP. Регулярные выражения в PHP Php регулярные выражения примеры
Регулярные выражения (сокращенно — regex ) представляют собой последовательности символов, которые формируют шаблоны поиска. В основном они используются в шаблонах сопоставления со строками.
Краткая история
- Все началось в 1940 — 1960-х годах, когда множество умных людей говорили о регулярных выражениях;
- 1970-е годы g / re / p;
- 1980 Perl и Генри Спенсер;
- 1997 PCRE (регулярные выражения, совместимые с Perl). Именно тогда начался взлет того, что мы называем регулярные выражения. PCRE предоставляет библиотеки почти для каждого языка.
PHP включает в себя три основные функции для работы с PCRE — preg_match , preg_match_all и preg_replace .
Сравнение соответствия
Выражение возвращает 1 , если соответствие установлено, 0 — если нет, и false — если возникает ошибка:
int preg_match (string $pattern, string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]])
Регулярного выражения пример, который возвращает количество найденных совпадений:
int preg_match_all (string $pattern, string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]])
Замена
Выражение возвращает замененную строку или массив (на основе объекта $subject ):
mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject [, int $limit = -1 [, int $count ]])
Общее использование регулярных выражений в JavaScriptРегулярные выражения в JavaScript выглядят почти так же, как и в PHP .
Сравнение соответствия
Возвращает массив совпадений или null , если совпадений не найдено:
string.match(RegExp);
Замена
Регулярное выражение, которое возвращает строку с выполненными заменами:
string.replace(RegExp, replacement);
Особенности регулярных выражений в JavaScript- Точка никогда не соответствует новой строке:
- Те же методы для сравнения соответствия и замены через регулярное выражение, что и без них.
Рассмотрим пример, в котором нужно найти адреса электронной почты в базе кода. Наша цель:
Аналоговые сокеты
Регулярные выражения состоят из двух типов символов:
- специальные символы: ? * + {} () ^ $ / .
- Литералы.
Представьте себе входные строки как болты, а шаблон — как набор разъемов для них (в соответствующем порядке).
Специальные символы
При проверке регулярных выражений нужно знать, как работают специальные символы:
- Символ обратной косой черты \ может заменять другой специальный символ в регулярном выражении:
- Точка и w — .
Совпадение со всеми символами, кроме новых строк. Если хотите проверить на соответствие точке, и только точке — , на соответствие буквам, цифрам и нижнему подчеркиванию — w
- Квадратные скобки .
Совпадение с символами внутри скобок. Поддерживает диапазоны. Некоторые примеры:
o — соответствует любым a, b или c.
o прописные буквы.
o любая цифра.
o — соответствует любому буквенному символу в нижнем или верхнем регистре.
Опционально? Соответствие 0 или 1.
Звездочка *.
Звездочка обозначает 0 или более символов.
Соответствие 1 или более символам.
Фигурные скобки {}.
Минимальное и максимальное значения. Некоторые примеры синтаксиса регулярных выражений:
o {1,} не менее 1.
o {1,3} от 1 до 3.
o {1,64} от 1 до 64.
Добавим все это, чтобы получить регулярное выражение для адресов электронной почты:
/+@+(.+)*/i
Как это выглядит в PHP :
preg_match_all("/+@+(.+)*/i", $input_lines, $output_array);
Использование регулярного выражения для валидацииЗадача : убедиться, что вводимые данные — это то, что мы ожидаем. Цель 1 : /[^w$.]/ Цель 2: /^{1,2}$/
Регулярные выражения подходят для поиска элементов, но вам нужно знать, что именно вы ищете.
Когда не стоит использовать регулярное выражение для проверки?Многие случаи лучше обрабатывать с помощью функции PHP filter_var . Например, проверка адреса электронной почты должна выполняться с помощью встроенных фильтров PHP :
filter_var("[email protected]", FILTER_VALIDATE_EMAIL)
Валидация с помощью регулярных выраженийРегулярные выражения в конце строки используют анкоры:
^
— указывает начало строки.
$
— знак доллара, который указывает конец строки.
if (!preg_match("%^{1,2}$%", $_POST["subscription_frequency"])) { $isError = true; }
Исключенные классы символов[^abc] — все, кроме a , b или c , включая новые строки.
Пример, который обеспечивает ввод только буквенно-цифровых символов, тире, точки, подчеркивания:
if (preg_match("/[^0-9a-z-_.]/i", $productCode)) { $isError = true; }
Поиск и заменаНаиболее распространенными функциями PCRE для выполнения поиска и замены являются preg_replace() и preg_replace_callback() . Но есть также preg_filter() и preg_replace_callback_array() , которые делают почти то же самое. Обратите внимание, что функция preg_replace_callback_array() доступна, начиная с PHP7 .
Заменить слова в списке$subject = "I want to eat some apples."; echo preg_replace("/apple|banana|orange/", "fruit", $subject);
Результат
I want to eat some fruits.
Если в регулярном выражении есть подшаблоны (в круглых скобках ), можно заменить $N или N (где N является целым числом > = 1 ), это называется «обратная ссылка».
Перестановка двух чисел$subject = "7/11"; echo preg_replace("/(d+)/(d+)/", "$2/$1", $subject);
Результат
Изменение форматирования даты$subject = "2001-09-11"; echo preg_replace("/(d+)-(d+)-(d+)/", "$3/$2/$1", $subject);
Результат
Простой пример замены URL-адреса в теге$subject = "Please visit https://php.earth/doc for more articles."; echo preg_replace("#(https?://([^s./]+(?:.[^s./]+)*[^s]*))#i", "$2", $subject);
Результат
Давно хотел разобраться с регулярными выражениями. Хотя «разобраться» — громко сказано. Чтобы постичь великое искусство и стать повелителем регулярных выражений, нужно постоянно с ними иметь дело. Мало изучить синтаксис, спецсимволы и модификаторы, — нужно уметь ими пользоваться. А умение пользоваться приходит с опытом.
В данном посте буду выкладывать примеры использования регулярных выражений, в работе которых разобрался сам.
Таблица спецсимволов
\ | Символ экранирования. Пример: ‘/seo\/smo/’ — соответствует строке, в которой есть seo/smo. |
^ | Символ начала данных. Пример: ‘/^seo/’ — соответствует строке, которая начинается словом seo. |
$ | Символ конца данных. Пример: ‘/блог$/’ — соответствует строке, которая заканчивается словом блог. |
. | Любой символ, кроме перевода строки. Пример: ‘/seo.ult/’ — соответствует строке seopult, seo9ult, seo@ult и т.д. |
Внутри этих скобок перечисляются символы, любой из которых может стоять на данном месте, но только один. Пример: ‘/seoult/’ — под соответствие попадут только строки, содержащие seopult, seokult или seomult. | |
| | Или. Пример ниже. |
() | Подмаска. |
? | Одно или ноль вхождений предшествующего символа или подмаски. |
* | Любое количество вхождений предшествующего символа или подмаски. В том числе и ноль. |
+ | Одно или более вхождений. |
Пример: ‘/se+(op|om)?.*t/’ — буква s, затем одна или несколько букв e, после этого сочетание op или om может встречаться один раз, а может и ни разу, потом любое количество любых символов и буква t. | |
{a,b} | Количество вхождений предшествующего символа или подмаски от a до b. Пример: {0,} — то же самое, что *, {0,1} — то же, что?, {3,5} — 3, 4 или 5 повторений. |
Простые примеры php скриптов с использованием регулярных выражений :
1) Предыдущие и последующие выражения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |