English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, vous apprendrez comment fonctionne l'expression régulière et comment l'utiliser de manière efficace pour effectuer des correspondances de motifs en PHP.
L'expression régulière est généralement appelée regex ou RegExp C'est une chaîne de caractères de format spécial, utilisée pour rechercher des motifs dans le texte. L'expression régulière est l'un des outils les plus puissants disponibles aujourd'hui, capable de traiter et de manipuler efficacement le texte. Par exemple, elle peut être utilisée pour vérifier si le format des données saisies par l'utilisateur (par exemple, le nom, l'e-mail, le numéro de téléphone, etc.) est correct, pour trouver ou remplacer des chaînes de caractères correspondantes dans le contenu du texte, etc.
PHP(版本5.3PHP (versionand higher versions) support Perl-style regular expressions through its preg_ function series. Why use Perl-style regular expressions? Because Perl (Practical extraction and reporting language
) is the first mainstream programming language to provide integrated support for regular expressions, and is renowned for its powerful support for regular expressions as well as extraordinary text processing and manipulation capabilities.
Before delving into the world of regular expressions, let's first briefly introduce the commonly used PHP built-in pattern matching features. | Function |
---|---|
Description | 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_grep() |
Return the elements of the input array that match the pattern. | preg_split() |
Use regular expressions to split a string into substrings. | preg_quote() |
Quote the regular expression characters found in the string. Note:
Regular expression syntaxRegular expression syntax includes the use of special characters (do not confuse them withHTML special characters * Confusion). Characters with special meaning in regular expressions are: . + ?
[ ] ( ) { } ^ $ | \. Every time you want to use them literally, you need to escape them with a backslash. For example, to match ".", you must write \. All other characters are automatically taken in their literal meaning.
Character class
The square brackets around a character pattern are called character classes, for example [ABC]. A character class always matches a single character from the specified list, which means the expression [abc] only matches the characters a, b, or c.
You can also define a negative character class to match any character except the ones within the brackets, for example [^abc].-Use hyphen (-) to define a character range inside parentheses [0-9Here are some examples of character classes:
Expression régulière | Que peut-elle faire |
---|---|
[abc] | Match any character from a, b, or c. |
[^abc] | Match any character except a, b, c. |
[a-z] | Match any character from lowercase letter a to lowercase letter z. |
[A-Z] | Match any character from uppercase letter A to uppercase letter Z. |
[a-Z] | 匹配从小写字母a到大写字母Z的任意一个字符。 |
entre une lettre minuscule a et une lettre majuscule Z.-9] | [09entre un nombre. Correspond à |
[a-z0-9] | ou entre 0 et9entre des caractères. Correspond à |
Les exemples suivants vous montreront comment utiliser les expressions régulières et la fonction PHP preg_match() pour rechercher la présence d'un motif dans une chaîne :
<?php $pattern = "/ca[kf]e/"; $text = "He was eating cake in he cafe."; if(preg_match($pattern, $text)){ echo "Correspondance trouvée!"; } else{ echo "Correspondance non trouvée."; } ?>测试看看‹/›
De même, vous pouvez utiliser la fonction preg_match_all() pour trouver toutes les correspondances dans une chaîne :
<?php $pattern = "/ca[kf]e/"; $text = "He was eating cake in he cafe."; $matches = preg_match_all($pattern, $text, $array); echo $matches . " matches were found."; ?>测试看看‹/›
Conseil :Les expressions régulières ne sont pas spécifiques à PHP. Java, Perl, Python et d'autres langages utilisent les mêmes symboles pour rechercher des motifs de texte.
Certains caractères de classe (comme les nombres, les lettres et les espaces) sont utilisés si fréquemment qu'ils ont des noms d'abréviations. Le tableau suivant liste ces classes prédéfinies :
Abréviations | Que peut-elle faire |
---|---|
. | Correspond à tout caractère sauf le retour chariot \n. |
\d | Correspond à tout caractère numérique. Équivalent à [0-9] identique. |
\D | Correspond à tout caractère non numérique. Équivalent à [^0-9] identique |
\s | Correspond à tout caractère blanc (espace, tabulation, retour chariot ou retour ligne). Équivalent à [\t\n\r]. |
\S | Correspond à tout caractère non espace. Équivalent à [^\t\n\r] |
\w | Correspond à tout caractère mot (défini comme a à z, A à Z, 0 à9et les traits de soulignement). Équivalent à [a-zA-Z_0-9] identique |
\W | Correspond à tout caractère non mot. Équivalent à [^a-Za-Z_0-9] identique |
Les exemples suivants vous montreront comment utiliser les expressions régulières et la fonction PHP preg_replace() pour rechercher et remplacer des espaces dans une chaîne :
<?php $pattern = "/\s/"; $replacement = "-"; $text = "Earth evolves around\nthe\tSun"; //Remplacement des espaces, des retours chariot et des tabulations echo preg_replace($pattern, $replacement, $text); echo "<br>"; //Seulement le remplacement des espaces echo str_replace(" ", "-" $text"); ?>测试看看‹/›
Dans la section précédente, nous avons appris comment correspondre de multiples façons à un caractère unique. Mais que faire si vous souhaitez correspondre à plusieurs caractères ? Par exemple, supposons que vous cherchiez des mots contenant une ou plusieurs instances de la lettre p, ou des mots contenant au moins deux p, et ainsi de suite. C'est là que les quantificateurs entrent en jeu. En utilisant des quantificateurs, vous pouvez spécifier le nombre de fois que les caractères doivent correspondre dans l'expression régulière.
Le tableau suivant liste diverses méthodes pour quantifier des modèles spécifiques :
Expression régulière | Que peut-elle faire |
---|---|
p+ | Correspondre à une ou plusieurs lettres p. |
p* | Correspondre à zéro ou plusieurs occurrences de la lettre p. |
p? | Correspondre à zéro ou une occurrence de la lettre p. |
p{2} | Correspondre exactement deux lettres p. |
p{2,3} | Correspondre à au moins deux occurrences de la lettre p, mais pas plus de trois occurrences de la lettre p. |
p{2,} | Correspondre deux fois ou plus2fois apparaissante de la lettre p. |
p{3} | Correspondre à trois occurrences maximales de la lettre p |
Dans l'exemple suivant, l'expression régulière utilisera la fonction PHP preg_split() pour diviser la chaîne en virgules, séries de virgules, espaces ou leur combinaison :
<?php $pattern = "/[\s,]+/"; $text = "My favourite colors are red, green and blue"; $parts = preg_split($pattern, $text); //Parcourir le tableau $parts et afficher les sous-chaînes foreach($parts as $part){ echo $part . "<br>"; } ?>测试看看‹/›
Dans certains cas, vous souhaitez effectuer une correspondance à la début ou à la fin d'une ligne, d'un mot ou d'une chaîne. Pour cela, vous pouvez utiliser des ancrages. Deux ancrages courants sont le symbole d'insertion (^) pour indiquer le début d'une chaîne et le symbole dollar ($) pour indiquer la fin d'une chaîne.
Expression régulière | Que peut-elle faire |
---|---|
^p | Correspondre à la lettre p au début de la ligne. |
p$ | Correspondre à la lettre p à la fin de la ligne. |
Dans l'exemple suivant, l'expression régulière ne montrera que les noms de l'array $names commençant par la lettre "J" en utilisant la fonction PHP preg_grep() :
<?php $pattern = "/^J/"; $names = array("Jhon Carter", "Clark Kent", "John Rambo"); $matches = preg_grep($pattern, $names); //Parcourir le tableau $matches et afficher les noms correspondants foreach($matches as $match){ echo $match . "<br>"; } ?>测试看看‹/›
Les modificateurs de modèle vous permettent de spécifier la manière dont la correspondance de modèle est traitée. Les modificateurs de modèle sont placés directement après l'expression régulière, par exemple, si vous souhaitez rechercher le modèle sans distinction de casse, vous pouvez utiliser le modificateur i, comme indiqué ci-dessous :/pattern/i. Le tableau suivant liste certains des modificateurs de modèle les plus courants.
Modificateur | Que peut-elle faire |
---|---|
i | Rendre la correspondance insensible à la casse. |
m | Modifier le comportement de ^ et $ pour correspondre aux limites de retour à la ligne (c'est-à-dire le début ou la fin de chaque ligne dans une chaîne multiligne), plutôt que aux limites de chaîne. |
g | Effectuer une correspondance globale, c'est-à-dire trouver toutes les correspondances. |
o | Évaluer l'expression une seule fois. |
s | Modifier le comportement de ". (point)" pour correspondre à tous les caractères, y compris les caractères de retour à la ligne. |
x | 允许您在正则表达式中使用空格和注释以保持清晰度。 |
以下示例将向您展示如何使用i修饰符和PHP preg_match_all()函数执行不区分大小写的全局搜索。
<?php $pattern = "/color/i"; $text = "Color red is more visible than color blue in daylight."; $matches = preg_match_all($pattern, $text, $array); echo $matches . " matches were found."; ?>测试看看‹/›
同样,以下示例显示如何使用^锚点和m修饰符与PHP preg_match_all()函数在多行字符串的每一行的开头进行匹配。
<?php $pattern = "/^color/im"; $text = "Color red is more visible than \ncolor blue in daylight."; $matches = preg_match_all($pattern, $text, $array); echo $matches . " matches were found."; ?>测试看看‹/›
单词边界字符(\b)可帮助您搜索以模式开头和/或结尾的单词。例如,正则表达式/\bcar/匹配以模式car开头的单词,并匹配cart, carrot, 或 cartoon,但不匹配oscar。
同样,正则表达式/car\b/匹配以模式car结尾的单词,并且匹配scar, oscar, 或 supercar,但不匹配cart。同样,/\bcar\b/匹配以单词car开头和结尾的单词,并且仅匹配单词car。
以下示例将以粗体突出显示以car开头的单词:
<?php $pattern = ''/\bcar\w*/'; $replacement = '<b>$0</b>'; $text = 'Words beginning with car: cart, carrot, cartoon. Words ending with car: scar, oscar, supercar.'; echo preg_replace($pattern, $replacement, $text); ?>测试看看‹/›
我们希望您已经了解了正则表达式的基础知识。要了解如何使用正则表达式验证表单数据,请查看有关PHP表单验证的教程。