PHP - Regular Expressions: A Beginner's Guide

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

PHP - Regular Expression

Что такое Regular Expressions?

Прежде чем мы перейдем к конкретным вещеям в PHP, давайте поймем, что такое регулярные выражения (regex). Представьте, что вы детектив, пытающийся найти определенный шаблон в море текста. Это essentailly то, что делает regex – он помогает вам искать, находить и манипулировать текстом на основе шаблонов. Круто, правда?

POSIX Regular Expressions

Регулярные выражения POSIX (Portable Operating System Interface) были исходным стандартом для regex в PHP. Хотя они не так часто используются сейчас, понимание их может дать вам прочный фундамент.

Пример базового POSIX Regex

Давайте начнем с простого примера:

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/quick/";
if (ereg($pattern, $text)) {
echo "Match found!";
} else {
echo "No match found.";
}

В этом примере мы ищем слово "quick" в нашей фразе. Функция ereg() проверяет, совпадает ли шаблон где-либо в тексте.

PHP's Regexp POSIX Functions

PHP предоставляет несколько функций POSIX regex. Вот таблица самых commonly используемых:

Функция Описание
ereg() Regular expression match
eregi() Case-insensitive regular expression match
ereg_replace() Replace regular expression
split() Split string into array by regular expression

Пример: Использование eregi() для регистро-независимого совпадения

$text = "The Quick Brown Fox";
$pattern = "quick";
if (eregi($pattern, $text)) {
echo "Match found!";
} else {
echo "No match found.";
}

На этот раз мы найдем совпадение, даже если "Quick" написан с большой буквы в нашем тексте.

PERL Style Regular Expressions

Теперь давайте поговорим о более modern и мощных регулярных выражениях, совместимых с PERL (PCRE). Это то, что вы, скорее всего, используете в своих проектах PHP.

Базовый пример PCRE

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/quick/";
if (preg_match($pattern, $text)) {
echo "Match found!";
} else {
echo "No match found.";
}

Этот пример похож на наш пример POSIX, но мы используем preg_match() вместо ereg().

PHP's Regexp PERL Compatible Functions

Функции PCRE в PHP более versatile и эффективны. Вот таблица commonly используемых функций:

Функция Описание
preg_match() Perform a regular expression match
preg_match_all() Perform a global regular expression match
preg_replace() Perform a regular expression search and replace
preg_split() Split string by a regular expression

Пример: Использование preg_match_all() для поиска всех совпадений

$text = "The quick brown fox jumps over the quick lazy dog.";
$pattern = "/quick/";
if (preg_match_all($pattern, $text, $matches)) {
echo "Found " . count($matches[0]) . " matches!";
print_r($matches);
} else {
echo "No matches found.";
}

Этот скрипт найдет все occurrences của "quick" в нашем тексте и сохранит их в массив $matches.

Advanced PCRE Techniques

Теперь, когда мы рассмотрели основы, давайте посмотрим на некоторые более advanced техники.

Metacharacters

Metacharacters – это special characters в regex, которые имеют конкретные значения. Вот некоторые из них:

  • . : Matches any single character except newline
  • ^ : Matches the start of a string
  • $ : Matches the end of a string
  • * : Matches zero or more occurrences
  • + : Matches one or more occurrences
  • ? : Matches zero or one occurrence

Пример: Использование Metacharacters

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/^The/";
if (preg_match($pattern, $text)) {
echo "The text starts with 'The'";
} else {
echo "The text does not start with 'The'";
}

Этот скрипт проверяет, начинается ли наш текст с "The".

Character Classes

Character classes позволяют вам совпадать с любым одним из набора символов. Они заключены в square brackets [].

Пример: Использование Character Classes

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/[aeiou]/i";
if (preg_match_all($pattern, $text, $matches)) {
echo "Found " . count($matches[0]) . " vowels!";
print_r($matches);
} else {
echo "No vowels found.";
}

Этот скрипт находит все гласные в нашем тексте. The i в конце шаблона делает его register-insensitive.

Practical Applications

Теперь, когда мы рассмотрели основы и некоторые advanced техники, давайте посмотрим на реальный мир применения.

Validating an Email Address

$email = "[email protected]";
$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
if (preg_match($pattern, $email)) {
echo "Valid email address!";
} else {
echo "Invalid email address!";
}

Этот скрипт использует сложный шаблон regex для проверки адреса электронной почты. Он проверяет:

  • One or more letters, numbers, dots, underscores, percent signs, plus signs, or hyphens before the @
  • One or more letters, numbers, dots, or hyphens after the @
  • A dot followed by two or more letters at the end

Заключение

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

Пока вы продолжаете свое путешествие в PHP, вы найдете regex incredibly полезным для задач, таких как validation форм, парсинг данных и манипуляция текстом. Продолжайте исследовать, продолжайте программировать и, самое главное, получайте удовольствие!

Credits: Image by storyset