Capturi în căutarea cu expresii regulate în PHP
Să presupunem că avem un șir care conține un domeniu:
<?php
$str = 'eee site.ru bbb';
?>
Să găsim acest domeniu și să-l împărțim în părți: să separăm numele domeniului de zona sa. Pentru aceasta vom folosi capturi speciale ale expresiilor regulate.
Capturile reprezintă elemente ale array-ului, în care pot fi puse părți găsite de expresia regulată. În cazul nostru, în primul captur putem pune numele domeniului, iar în al doilea - zona sa.
Să facem acest lucru. Pentru început, să scriem o expresie regulată, care găsește domeniul în șir:
<?php
$reg = '#[a-z0-9_-]+\.[a-z]{2,}#';
?>
Să indicăm acum în expresia noastră regulată, ce părți în ce captur ar trebui să ajungă. Acest lucru se face cu ajutorul parantezelor rotunde. Să evidențiem cu ele partea expresiei regulate care caută numele domeniului și partea care caută zona domeniului:
<?php
$reg = '#([a-z0-9_-]+)\.([a-z]{2,})#';
?>
Acum în funcția preg_match ca
al treilea parametru vom specifica o variabilă (orice nume):
<?php
preg_match($reg, $str, $res);
?>
În variabila specificată va ajunge un array cu capturile găsite. În același timp, în elementul zero al array-ului va fi șirul găsit, în primul element - primul captur, în al doilea element - al doilea captur și așa mai departe:
<?php
preg_match($reg, $str, $res);
var_dump($res); // va afișa ['site.ru', 'site', 'ru']
?>
Este dat un șir cu o dată:
<?php
$str = '2025-12-31';
?>
Puneți anul, luna și ziua în capturi separate.
Este dat un șir cu numele unui fișier:
<?php
$str = 'index.html';
?>
Puneți numele fișierului și extensia sa în capturi separate.