PHP preg_match(): regulární výrazy (regex)

⚡ Chytré shrnutí

Regulární výrazy v PHP jsou nástroje pro porovnávání vzorů, které ověřují, rozdělují a nahrazují text v jednom výrazu. Tento návod se zabývá základními funkcemi preg_match, preg_split a preg_replace, vysvětluje běžné metaznaky a krok za krokem vytváří funkční vzor pro ověřování e-mailů.

  • 🧩 Co je to regex: Regulární výraz je vzor, ​​který popisuje text a umožňuje jedné funkci ověřovat, vyhledávat nebo transformovat řetězce.
  • (Tj. preg_match: Funkce preg_match testuje, zda se vzor v řetězci vyskytuje, a při první shodě vrací hodnotu true, což je ideální pro validaci.
  • ✂️ preg_split: Funkce preg_split rozdělí řetězec do pole všude, kde se daný vzor vyskytuje, například rozdělením věty na mezery.
  • 🔁 preg_replace: Funkce preg_replace vyhledá všechny shody vzoru a nahradí je novým textem, což je užitečné pro šablonování a zvýrazňování.
  • 🔤 Metaznaky: Symboly jako ., ^, $, * a + vytvářejí složité vzory, například ukotvení shody na začátek nebo konec.
  • ???? Vzor e-mailu: Třídy znaků a kvantifikátory se slučují do jednoho vzoru, který kontroluje, zda je e-mailová adresa správně naformátovaná.
  • 🤖 AI Assist: Nástroje umělé inteligence dokáží napsat regulární výraz z prostého popisu a vysvětlit nebo ladit složitý existující vzorec.

Regulární výrazy v PHP

Co je regulární výraz v PHP?

Regulární výrazy v PHP, také známé jako regex, jsou výkonným nástrojem pro porovnávání vzorů, který lze provést v jediném výrazu. Regulární výrazy používají speciální znaky, jako jsou +, - a ^, k vytváření složitých výrazů. Mohou vám pomoci s úkoly, jako je ověřování e-mailových adres, IP adres a dalších.

Proč používat regulární výrazy

  • Regulární výrazy v PHP zjednodušují identifikaci vzorů v řetězcových datech voláním jediné funkce. To nám šetří čas strávený kódováním.
  • Při ověřování uživatelských vstupů, jako jsou e-mailové adresy, názvy domén, telefonní čísla a IP adresy
  • Zvýraznění klíčových slov ve výsledcích vyhledávání
  • Při vytváření vlastní HTML šablony. Regex v PHP lze použít k identifikaci značek šablon a jejich nahrazení skutečnými daty.

Vestavěné funkce regulárních výrazů v PHP

PHP má vestavěné funkce, které nám umožňují pracovat s regulárními výrazy, což se v tomto tutoriálu naučíme. Pojďme se podívat na běžně používané funkce regulárních výrazů v PHP.

  • preg_match() v PHP – tato funkce se používá k porovnávání vzorů s řetězcem. Vrací true, pokud je nalezena shoda, a false, pokud shoda nalezena není.
  • preg_split() v PHP – tato funkce se používá k provedení porovnávání vzorů s řetězcem a následnému rozdělení výsledků do číselného pole.
  • preg_replace() v PHP – tato funkce se používá k provedení shody vzoru na řetězci a následné nahrazení shody zadaným textem.

Níže je uvedena syntaxe regulárních výrazů, jako například preg_match(), preg_split() nebo preg_replace().

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

TADY,

  • „function_name(…)“ je buď preg_match(), preg_split() nebo preg_replace().
  • „/…/“ lomítka označují začátek a konec regulárního výrazu
  • „'/pattern/'“ je vzor, ​​který potřebujeme shodovat
  • „předmět“ je textový řetězec, se kterým se má porovnávat

Pojďme se nyní podívat na praktické příklady, které implementují výše uvedené regulární výrazy PHP.

Preg_match() v PHP

První příklad používá funkci preg_match() k provedení jednoduchého porovnávání vzoru pro slovo guru v daném URL.

Níže uvedený kód ukazuje implementaci funkce preg_match() pro výše uvedený příklad.

<?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";
}
?>

Přejděte na URL http://localhost/phptuts/preg_match_simple.php

Vestavěné funkce regulárních výrazů

Prozkoumejme část kódu zodpovědnou za náš výstup, preg_match('/guru/', $my_url)ZDE,

  • „preg_match(…)“ je funkce regulárního výrazu PHP
  • „'/guru/'“ je vzor regulárního výrazu, který se má porovnat
  • „$my_url“ je proměnná obsahující text, se kterým se má porovnávat.

PHP Preg_split()

Podívejme se nyní na další příklad, který používá funkci preg_split().

Vezmeme řetězcovou frázi a rozložíme ji do pole; vzor, ​​který má být spárován, je jedna mezera.

Textový řetězec, který má být použit v tomto příkladu, je „Miluji regulární výrazy“.

Níže uvedený kód ilustruje implementaci výše uvedeného příkladu.

<?php

$my_text = "I Love Regular Expressions";

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

print_r($my_array );

?>

Přejděte na URL http://localhost/phptuts/preg_split.php

PHP Preg_split()

PHP Preg_replace()

Podívejme se nyní na funkci preg_replace(). Funkce PHP který provede shodu vzoru a poté vzor nahradí něčím jiným.

Níže uvedený kód hledá slovo guru v a šňůra.

Nahrazuje slovo guru slovem guru obklopeným kódem CSS, který zvýrazňuje barvu pozadí.

<?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;

?>

Za předpokladu, že jste uložili soubor preg_replace.php, přejděte do URL http://localhost/phptuts/preg_replace.php

PHP Preg_replace()

Metaznaky regulárních výrazů

Výše uvedené příklady používaly velmi základní vzory. Metaznaky nám umožňují provádět složitější porovnávání vzorů, například testovat platnost e-mailové adresy. Pojďme se nyní podívat na běžně používané metaznaky.

Metacharakter Description Příklad
. Odpovídá libovolnému jednotlivému znaku kromě nového řádku /./ odpovídá všemu, co má jeden znak
^ Odpovídá začátku řetězce nebo vylučuje znaky /^PH/ odpovídá libovolnému řetězci, který začíná PH
$ Odpovídá vzoru na konci řetězce /com$/ odpovídá guru99.com, yahoo.com atd.
* Odpovídá nule nebo více předchozím znakům /com*/ odpovídá počítači, komunikaci atd.
+ Vyžaduje, aby se předchozí znak(y) objevily alespoň jednou /yah+oo/ odpovídá yahoo
\ Používá se k escapování metaznaků /yahoo+\.com/ považuje tečku za doslovnou hodnotu
[...] Třída postavy /[abc]/ odpovídá a, b nebo c
AZ Odpovídá malým písmenům /az/ odpovídá cool, happy atd.
AZ Odpovídá velkým písmenům /AZ/ odpovídá CO, JAK, PROČ atd.
0-9 Odpovídá libovolnému číslu mezi 0 a 9 /0-4/ odpovídá 0,1,2,3,4

Výše uvedený seznam uvádí pouze nejběžněji používané metaznaky v regulárních výrazech.

Podívejme se nyní na poměrně složitý příklad, který ověřuje platnost e-mailové adresy.

<?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";
}
?>

Vysvětlení vzoru ověřování e-mailů

TADY,

  • „/…/“ začíná a končí regulární výraz
  • „^[a-zA-Z0-9._-]“ odpovídá jakýmkoli malým nebo velkým písmenům, číslicím mezi 0 a 9 a tečkám, podtržítkům nebo pomlčkám.
  • „+@[a-zA-Z0-9-]“ odpovídá symbolu @ následovanému malými nebo velkými písmeny, číslicemi mezi 0 a 9 nebo pomlčkami.
  • „+\.[a-zA-Z.]{2,5}$/“ nahrazuje tečku zpětným lomítkem a poté na konci řetězce vyhledává jakákoli malá nebo velká písmena s délkou znaku mezi 2 a 5.

Přejděte na URL http://localhost/phptuts/preg_match.php

Vzor pro ověření e-mailů v PHP

Jak je vidět z výše uvedeného rozpisu, metaznaky jsou velmi účinné, pokud jde o porovnávání vzorů.

Nejčastější dotazy

Funkce preg_match se zastaví na první shodě a naplní $matches tímto jedním výsledkem. Funkce preg_match_all najde všechny shody v řetězci a vrátí je všechny ve vnořeném poli, což vyhovuje napříkladtracopakování položek.

Modifikátory následují za uzavíracím oddělovačem a mění chování při porovnávání. Modifikátor i znemožňuje rozlišování velkých a malých písmen, m zachází s každým řádkem zvlášť pro ^ a $ a s umožňuje tečce porovnávat nové řádky, jako v /guru/i.

Zalomte části vzoru do závorek a vytvořte skupiny pro zachycení. Po preg_match se celá shoda nachází v $matches[0] a každá skupina následuje v $matches[1], $matches[2] atd.

Ano. Popište text, který chcete porovnat, například telefonní číslo nebo formát data, a umělá inteligence může vytvořit vzorek plus příklad preg_match. Než se na něj spolehnete, otestujte to na reálných a okrajových vstupech.

Ano. Vložte vzor a umělá inteligence ho může rozebrat token po tokenu, vysvětlit, čemu každá část odpovídá, a ukázat, proč selhává na určitém vstupu, a poté navrhnout opravenou verzi.

Shrňte tento příspěvek takto: