Captures dans les recherches par expressions régulières en PHP
Supposons que nous ayons une chaîne de caractères contenant un domaine :
<?php
$str = 'eee site.ru bbb';
?>
Trouvons ce domaine et séparons-le en parties : séparons le nom de domaine de sa zone. Pour cela, nous utiliserons les captures des expressions régulières.
Les captures représentent les éléments d'un tableau, dans lesquels on peut placer des parties trouvées par l'expression régulière. Dans notre cas, dans la première capture nous pouvons placer le nom de domaine, et dans la seconde - sa zone.
Faisons cela. Pour commencer, écrivons une expression régulière, qui trouve le domaine dans la chaîne :
<?php
$reg = '#[a-z0-9_-]+\.[a-z]{2,}#';
?>
Maintenant, dans notre expression, indiquons quelles parties doivent aller dans quelle capture. Cela se fait à l'aide de parenthèses. Utilisons-les pour délimiter la partie de l'expression qui cherche le nom de domaine, et la partie qui cherche la zone du domaine :
<?php
$reg = '#([a-z0-9_-]+)\.([a-z]{2,})#';
?>
Maintenant, dans la fonction preg_match
, en tant que
troisième paramètre, spécifions une variable (n'importe quel nom) :
<?php
preg_match($reg, $str, $res);
?>
Dans la variable spécifiée se trouvera un tableau avec les captures trouvées. De plus, dans l'élément zéro du tableau se trouvera la chaîne trouvée, dans le premier élément - la première capture, dans le deuxième élément - la deuxième capture et ainsi de suite :
<?php
preg_match($reg, $str, $res);
var_dump($res); // affichera ['site.ru', 'site', 'ru']
?>
Une chaîne avec une date est donnée :
<?php
$str = '2025-12-31';
?>
Placez l'année, le mois et le jour dans des captures séparées.
Une chaîne avec un nom de fichier est donnée :
<?php
$str = 'index.html';
?>
Placez le nom du fichier et son extension dans des captures séparées.