PHP preg_match(): Регулярни изрази (Regex)

⚡ Умно обобщение

Регулярните изрази в PHP са инструменти за съпоставяне на шаблони, които валидират, разделят и заместват текст в един израз. Това ръководство обхваща основните функции preg_match, preg_split и preg_replace, обяснява често срещаните метасимволи и изгражда работещ шаблон за валидиране на имейли стъпка по стъпка.

  • 🧩 Какво е Regex: Регулярният израз е шаблон, който описва текст, позволявайки на една функция да валидира, търси или трансформира низове.
  • preg_match: preg_match проверява дали даден шаблон се появява в низ и връща true при първото съвпадение, идеално за валидиране.
  • ✂️ preg_split: preg_split разделя низа на масив, където и да се среща шаблонът, например разделя изречение на интервали.
  • 🔁 preg_replace: preg_replace намира всяко съвпадение на шаблон и го замества с нов текст, което е полезно за шаблониране и маркиране.
  • 🔤 Метасимволи: Символи като ., ^, $, * и + изграждат сложни модели, например закотвяне на съвпадение към началото или края.
  • 📧 Шаблон за имейл: Класовете символи и квантификаторите се комбинират в един шаблон, който проверява дали имейл адресът е правилно оформен.
  • 🤖 AI Assist: Инструментите с изкуствен интелект могат да напишат регулярен израз от обикновено описание и да обяснят или отстранят грешки в сложен съществуващ модел.

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

Какво е регулярен израз в PHP?

PHP регулярни изрази, известни още като regex, са мощен инструмент за съпоставяне на шаблони, който може да се изпълни в един израз. Регулярните изрази използват специални символи като +, - и ^, за да създават сложни изрази. Те могат да ви помогнат да изпълнявате задачи като валидиране на имейл адреси, IP адреси и други.

Защо да използвате регулярни изрази

  • Регулярните изрази в PHP опростяват идентифицирането на модели в низови данни, като извикват една единствена функция. Това ни спестява време за кодиране.
  • При валидиране на потребителски вход, като например имейл адреси, имена на домейни, телефонни номера и IP адреси
  • Маркиране на ключови думи в резултатите от търсенето
  • Когато създавате персонализиран HTML шаблон. Regex в PHP може да се използва за идентифициране на етикетите на шаблона и за замяната им с действителни данни.

Вградени функции за регулярен израз в PHP

PHP има вградени функции, които ни позволяват да работим с регулярни изрази, които ще научим в този урок. Нека разгледаме често използваните функции за регулярни изрази в PHP.

  • preg_match() в PHP – тази функция се използва за извършване на съпоставяне на шаблони на низ. Тя връща true, ако е намерено съвпадение, и false, ако не е намерено съвпадение.
  • preg_split() в PHP – тази функция се използва за извършване на съвпадение на шаблони върху низ и след това разделяне на резултатите в числов масив.
  • preg_replace() в PHP – тази функция се използва за извършване на съвпадение на шаблон на низ и след това замяна на съвпадението с посочения текст.

По-долу е показан синтаксисът на функция с регулярен израз, като например preg_match(), preg_split() или preg_replace().

<?php
function_name('/pattern/',subject);
?>

ТУК,

  • „function_name(…)“ е или preg_match(), preg_split(), или preg_replace().
  • „/…/“ наклонените черти означават началото и края на нашия регулярен израз
  • „'/pattern/'“ е шаблонът, който трябва да съпоставим
  • „subject“ е текстовият низ, с който да се съпостави

Нека сега разгледаме практически примери, които имплементират горните PHP функции за регулярни изрази.

Preg_match() в PHP

Първият пример използва функцията preg_match(), за да извърши просто съвпадение на шаблон за думата guru в даден URL.

Кодът по-долу показва имплементацията на функцията preg_match() за горния пример.

<?php
$my_url = "www.guru99.com";
if (preg_match("/guru/", $my_url))
{
echo "the url $my_url contains guru";
}
else
{
echo "the url $my_url does not contain guru";
}
?>

Прегледайте URL http://localhost/phptuts/preg_match_simple.php

Вградени функции за регулярен израз

Нека разгледаме частта от кода, отговорна за нашия резултат, preg_match('/guru/', $my_url)ТУК,

  • „preg_match(…)“ е функцията за регулярен израз на PHP
  • “/guru/” е шаблонът на регулярен израз, който трябва да бъде съпоставен
  • “$my_url” е променливата, съдържаща текста, с който да се съпостави.

PHP Preg_split()

Нека сега разгледаме друг пример, който използва функцията preg_split().

Ще вземем низова фраза и ще я разбием в масив; шаблонът, който трябва да бъде съпоставен, е един интервал.

Текстовият низ, който ще се използва в този пример, е „I Love Regular Expressions“.

Кодът по-долу илюстрира изпълнението на горния пример.

<?php

$my_text = "I Love Regular Expressions";

$my_array = preg_split("/ /", $my_text);

print_r($my_array );

?>

Прегледайте URL http://localhost/phptuts/preg_split.php

PHP Preg_split()

PHP Preg_replace()

Нека сега разгледаме preg_replace() PHP функция който изпълнява съпоставяне на шаблон и след това замества шаблона с нещо друго.

Кодът по-долу търси думата guru в a низ.

Той замества думата guru с думата guru, заобиколена от CSS код, който подчертава цвета на фона.

<?php

$text = "We at Guru99 strive to make quality education affordable to the masses. Guru99.com";

$text = preg_replace("/Guru/", '<span style="background:yellow">Guru</span>', $text);

echo $text;

?>

Ако сте запазили файла preg_replace.php, отидете до URL http://localhost/phptuts/preg_replace.php

PHP Preg_replace()

Метазнаци на регулярни изрази

Горните примери използваха много основни шаблони. Метасимволите ни позволяват да извършваме по-сложни съпоставки с шаблони, като например проверка на валидността на имейл адрес. Нека сега разгледаме често използваните метасимволи.

Метасимвол Descriptйон Пример
. Съвпада с всеки отделен знак с изключение на нов ред /./ съвпада с всичко, което има един знак
^ Съвпада с началото на низ или изключва символи /^PH/ съвпада с всеки низ, който започва с PH
$ Съвпада с шаблон в края на низа /com$/ съответства на guru99.com, yahoo.com и др.
* Съвпада с нула или повече от предходните знаци /com*/ съответства на компютър, комуникация и т.н.
+ Изисква предходните знаци да се появят поне веднъж /yah+oo/ съвпада с yahoo
\ Използва се за екраниране на метасимволи /yahoo+\.com/ третира точката като буквална стойност
[...] Клас на знаци /[abc]/ съответства на a, b или c
AZ Съвпада с малки букви /az/ съвпада с cool, happy и др.
AZ Съвпада с главни букви /AZ/ съвпада с КАКВО, КАК, ЗАЩО и т.н.
0-9 Съвпада с всяко число между 0 и 9 /0-4/ отговаря на 0,1,2,3,4

Горният списък дава само най-често използваните метасимволи в регулярни изрази.

Нека сега разгледаме един доста сложен пример, който проверява валидността на имейл адрес.

<?php
$my_email = "name@company.com";
if (preg_match("/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/", $my_email)) {
echo "$my_email is a valid email address";
}
else
{
echo "$my_email is NOT a valid email address";
}
?>

Обяснение на модела за валидиране на имейли

ТУК,

  • „/…/“ започва и завършва регулярния израз
  • „^[a-zA-Z0-9._-]“ съвпада с всякакви малки или главни букви, числа между 0 и 9, както и точки, долни черти или тирета.
  • „+@[a-zA-Z0-9-]“ съответства на символа @, последван от малки или главни букви, цифри между 0 и 9 или тирета.
  • „+\.[a-zA-Z.]{2,5}$/“ екранира точката с помощта на обратната наклонена черта, след което съвпада с всички малки или главни букви с дължина на символа между 2 и 5 в края на низа.

Прегледайте URL http://localhost/phptuts/preg_match.php

PHP шаблон за валидиране на имейли

Както можете да видите от горното разпределение, метасимволите са много мощни, когато става въпрос за съвпадение на модели.

Въпроси и Отговори

preg_match спира на първото съвпадение и запълва $matches с този единствен резултат. preg_match_all намира всяко съвпадение в низа и ги връща всички във вложен масив, което е подходящо напримерtracповтарящи се елементи.

Модификаторите следват затварящия разделител и променят поведението при съвпадение. Модификаторът i прави шаблона нечувствителен към главни и малки букви, m третира всеки ред поотделно за ^ и $, а s позволява на точката да съвпада с новия ред, както в /guru/i.

Оградете части от шаблона в скоби, за да създадете групи за заснемане. След preg_match, пълното съвпадение е в $matches[0], а всяка група следва в $matches[1], $matches[2] и т.н.

Да. Опишете текста, който искате да съпоставите, като например телефонен номер или формат на дата, и изкуственият интелект може да генерира шаблона плюс пример за preg_match. Тествайте го спрямо реални и гранични входни данни, преди да разчитате на него.

Да. Поставете шаблона и изкуственият интелект може да го раздели токен по токен, да обясни на какво съответства всяка част и да посочи защо не успява при определен вход, след което да предложи коригирана версия.

Обобщете тази публикация с: