Maison > développement back-end > tutoriel php > Explication détaillée du rôle des modificateurs de modèle dans les expressions régulières

Explication détaillée du rôle des modificateurs de modèle dans les expressions régulières

藏色散人
Libérer: 2023-04-08 10:42:02
avant
3186 Les gens l'ont consulté

Explication détaillée du rôle des modificateurs de modèle dans les expressions régulières

Explication détaillée du rôle des modificateurs de motifs dans les expressions régulières (i, g, m, s, x, e)

Que sont les modificateurs de motif ?

1. Les modificateurs de motif ne sont que quelques lettres. Nous pouvons en utiliser une à la fois ou plusieurs consécutivement dans chaque expression régulière. certaine signification.

2. Le modificateur de motif est utilisé pour ajuster l'intégralité de l'expression régulière. Il peut également être considéré comme une extension de la fonction d'expression régulière.

Vous vous souvenez de la formule des expressions régulières ? "/Atoms and Metacharacters/Pattern Modifier", où la barre oblique est le caractère de limite.

La composition des modificateurs de motif

Les modificateurs de motif sont des lettres, mais celles-ci ont des significations particulières dans l'application des modificateurs de motif. Permettez-moi de jeter un œil aux modificateurs de modèle disponibles, veuillez consulter le tableau suivant :

Explication détaillée du rôle des modificateurs de modèle dans les expressions régulières

Puisque je veux dire que la correspondance n'est pas sensible à la casse, dans l'exemple suivant, nous ne le démontrons plus, regardons des exemples d'autres modificateurs de motifs.

1, modificateur de mode m.

Le code est le suivant :

<?php 
$pattern = &#39;/^abc/m&#39;; 
$string = &#39;bcd 
abc 
cba&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>
Copier après la connexion

Le résultat correspondant est réussi. Remarque : lorsque nous utilisons le modificateur de motif m, nous traitons la chaîne correspondante comme plusieurs lignes au lieu de la ligne unique par défaut, donc tant qu'une ligne commence par abc, la correspondance réussira. Cependant, s'il y a des espaces devant les lignes correspondantes, elles ne seront pas mises en correspondance, à moins que le mode de correspondance de l'expression régulière ne soit modifié !

2, modificateurs de mode s.

Le code est le suivant :

<?php 
$pattern = &#39;/a.*c/s&#39;; 
$string = &#39;adsadsa 
c&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>
Copier après la connexion

Le démérite pour ce match a également été réussi. Si vous supprimez les modificateurs de motif dans l'exemple ci-dessus, la correspondance échouera. Étant donné que le modificateur de motif s traite la chaîne correspondante comme une seule ligne, le "." dans le métacaractère peut représenter un symbole de nouvelle ligne.

3, modificateur de mode x.

Le code est le suivant :

<?php 
$pattern = &#39;/a c/x&#39;; 
$string = &#39;a c&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>
Copier après la connexion

Le résultat correspondant cette fois est échoué. Parce que nous avons utilisé le modificateur de motif x pour annuler les espaces dans le motif. Remarque : Nous ne pouvons pas utiliser le modificateur de motif pour annuler l'espace représenté par s.

4, modificateur de mode A.

Le code est le suivant :

<?php 
$pattern = &#39;/ac/A&#39;; 
$string = &#39;acahgyghvbm&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>
Copier après la connexion

La signification de l'expression régulière est de faire correspondre la chaîne commençant par ac, et le résultat est réussi.

Le modificateur de motif Z représente une correspondance qui se termine par une chaîne. L'utilisation est la même que A. Nous ne le démontrerons plus.

5, modificateur de mode U.

Ce modificateur de motif est très important ! Dans les expressions régulières, il est lui-même "gourmand". Alors, qu'est-ce que le mode gourmand ? Le mode gourmand signifie que par défaut, l'expression régulière continuera à essayer les correspondances suivantes après avoir trouvé la première correspondance, elle correspondra à la plus grande plage de chaînes. Mais parfois, ce n’est pas le résultat souhaité, nous devons donc annuler le mode gourmand.

Regardons d'abord un exemple de mode gourmand :

Le code est le suivant :

<?php 
$pattern = &#39;/<b>.*<\/b>/&#39;; 
$string = &#39;<b>welcome</b> <b>to</b> <b>phpfuns</b>&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>
Copier après la connexion

L'intention initiale de cet exemple est de correspondre à bienvenue, mais le résultat est pour faire correspondre le caractère entier de la chaîne de bienvenue à phpfuns (notez que notre chaîne 'bienvenue à phpfuns', son début et sa fin constituent exactement le modèle de correspondance de l'expression régulière, donc la correspondance est réussie), c'est le mode gourmand de la chaîne régulière expression. Bien entendu, ce n’est pas le résultat que nous souhaitons.

Annuler le mode gourmand

Nous pouvons utiliser le modificateur de motif U et le métacaractère ? pour annuler le mode gourmand de l'expression régulière de deux manières.

Le modificateur de mode U annule le mode gourmand

Le code est le suivant :

<?php 
$pattern = &#39;/<b>.*<\/b>/U&#39;; 
$string = &#39;<b>welcome</b> <b>to</b> <b>phpfuns</b>&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>
Copier après la connexion

Métacaractère ? Annuler le mode gourmand

Le code est le suivant :

<?php 
$pattern = &#39;/<b>.*?<\/b>/&#39;; 
$string = &#39;<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas&#39;; 
if (preg_match($pattern, $string, $arr)) { 
echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; 
print_r($arr); 
} else { 
echo "<font color=&#39;red&#39;>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; 
} 
?>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal