PHP - Regular Expressions: A Beginner's Guide
Привет, будущие маги PHP! Сегодня мы погружаемся в fascинирующий мир регулярных выражений в PHP. Не волнуйтесь, если вы никогда раньше не писали код – я буду вашим доброжелательным проводником в этом захватывающем путешествии. Пойдемте!
Что такое 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