Maison >développement back-end >tutoriel php >Explication détaillée des fonctions couramment utilisées dans les expressions régulières PHP

Explication détaillée des fonctions couramment utilisées dans les expressions régulières PHP

黄舟
黄舟original
2017-11-11 13:16:481868parcourir

Dans les articles précédents, nous avons découvert l'utilisation des expressions régulières php et la prise en main. Aujourd'hui, nous allons nous concentrer sur l'introduction des fonctions communes des expressions régulières php, les deux peuvent être utilisées. être utilisé parfaitement lorsqu'il est combiné ! !

1. preg_match()

Prototype de fonction :

int preg_match (string $pattern, string $content [, array $matches])

la fonction preg_match () recherche dans la chaîne $content une expression régulière qui correspond à l'expression régulière donnée par $pattern content . Si $matches est fourni, les résultats correspondants y sont placés. $matches[0] contiendra le texte qui correspond à l'intégralité du modèle, $matches[1] contiendra la première correspondance capturée de l'élément de modèle entre parenthèses, et ainsi de suite. Cette fonction n'effectue qu'une seule correspondance et renvoie finalement le nombre de résultats correspondants de 0 ou 1. Le listing 6.1 montre un exemple de code pour la fonction preg_match().
Code 6.1 Correspondance de date et d'heure
Le code est le suivant :

<?php 
//需要匹配的字符串。date函数返回当前时间 
$content = "Current date and time is ".date("Y-m-d h:i a").", we are learning PHP together."; 
//使用通常的方法匹配时间 
if (preg_match ("//d{4}-/d{2}-/d{2} /d{2}:/d{2} [ap]m/", $content, $m)) 
{ 
echo "匹配的时间是:" .$m[0]. "/n"; 
} 
//由于时间的模式明显,也可以简单的匹配 
if (preg_match ("/([/d-]{10}) ([/d:]{5} [ap]m)/", $content, $m)) 
{ 
echo "当前日期是:" .$m[1]. "/n"; 
echo "当前时间是:" .$m[2]. "/n"; 
} 
?>

Il s'agit d'un simple exemple de correspondance de chaîne de texte dynamique. En supposant que l'heure système actuelle est « 13 h 25 le 17 août 2006 », le contenu suivant sera affiché.
L'heure de correspondance est : 2006-08-17 01:25 pm
La date actuelle est : 2006-08-17
L'heure actuelle est : 01:25 pm

2 . ereg() et eregi()

ereg() est la fonction de correspondance pour les expressions régulières dans la bibliothèque d'extensions POSIX. eregi() est une version ignorant la casse de la fonction ereg(). Les deux ont des fonctions similaires à preg_match, mais la fonction renvoie une valeur booléenne indiquant si la correspondance a réussi ou non. Il convient de noter que le premier paramètre de la fonction de bibliothèque d'extension POSIX accepte une chaîne d'expression régulière, c'est-à-dire qu'aucun délimiteur n'est requis. Par exemple, le listing 6.2 est une méthode pour vérifier la sécurité des noms de fichiers.
Code 6.2 Contrôle de sécurité du nom de fichier
Le code est le suivant :


<?php 
$username = $_SERVER[&#39;REMOTE_USER&#39;]; 
$filename = $_GET[&#39;file&#39;]; 
//对文件名进行过滤,以保证系统安全 
if (!ereg(&#39;^[^./][^/]*$&#39;, $userfile)) 
{ 
die(&#39;这不是一个非法的文件名!&#39;); 
} 
//对用户名进行过滤 
if (!ereg(&#39;^[^./][^/]*$&#39;, $username)) 
{ 
die(&#39;这不是一个无效的用户名&#39;); 
} 
//通过安全过滤,拼合文件路径 
$thefile = "/home/$username/$filename"; 
?>


Normalement , L'utilisation de la fonction de correspondance d'expressions régulières compatible Perl perg_match() sera plus rapide que l'utilisation de ereg() ou eregi(). Si vous souhaitez simplement savoir si une chaîne contient une certaine sous-chaîne, il est recommandé d'utiliser la fonction strstr() ou strpos().

Remplacement des expressions régulières

1. ereg_replace() et eregi_replace()

Prototype de fonction :

string ereg_replace (string $pattern, string $replacement, string $string) 
string eregi_replace (string $pattern, string $replacement, string $string)

ereg_replace() recherche la chaîne de modèle $pattern dans $string et compare les résultats correspondants Remplacé avec $remplacement. Lorsque $pattern contient des unités de motif (ou sous-motifs), les positions dans $replacement telles que "/1" ou "$1" seront remplacées par le contenu correspondant à ces sous-motifs. Et "/0" ou "$0" fait référence au contenu de la chaîne entière correspondante. Il convient de noter que la barre oblique inverse est utilisée comme caractère d'échappement entre guillemets doubles, les formes "//0" et "//1" doivent donc être utilisées.
Les fonctions de eregi_replace() et ereg_replace() sont les mêmes, sauf que la première ignore la casse. Le code 6.6 est un exemple d'application de cette fonction. Ce code montre comment effectuer un travail de nettoyage simple sur le code source du programme.
Code 6.6 Nettoyer le code source
Le code est le suivant :

<?php 
$lines = file(&#39;source.php&#39;); //将文件读入数组中 
for($i=0; $i<count($lines); $i++) 
{ 
//将行末以“//”或“#”开头的注释去掉 
$lines[$i] = eregi_replace("(////|#).*$", "", $lines[$i]); 
//将行末的空白消除 
$lines[$i] = eregi_replace("[ /n/r/t/v/f]*$", "/r/n", $lines[$i]); 
} 
//整理后输出到页面 
echo htmlspecialchars(join("",$lines)); 
?>


2. preg_replace()

Prototype de fonction :

mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject [, int $limit])

preg_replace est plus puissant que ereg_replace. Les trois premiers paramètres peuvent tous utiliser des tableaux ; le quatrième paramètre $limit peut définir le nombre de remplacements, et la valeur par défaut est de tout remplacer. Le code 6.7 est un exemple d'application de remplacement de tableau.
Code 6.7 Remplacement du tableau
Le code est le suivant :


<?php 
//字符串 
$string = "Name: {Name}<br>/nEmail: {Email}<br>/nAddress: {Address}<br>/n"; 
//模式 
$patterns =array( 
"/{Address}/", 
"/{Name}/", 
"/{Email}/" 
); 
//替换字串 
$replacements = array ( 
"No.5, Wilson St., New York, U.S.A", 
"Thomas Ching", 
"tom@emailaddress.com", 
); 
//输出模式替换结果 
print preg_replace($patterns, $replacements, $string); 
?>

Les résultats de sortie sont les suivants.

Name: Thomas Ching", 
Email: tom@emailaddress.com 
Address: No.5, Wilson St., New York, U.S.A

Le modificateur de motif "e" peut être utilisé dans l'expression régulière de preg_replace. Sa fonction est d'utiliser le résultat correspondant comme expression et peut être réutilisée. Par exemple :
Le code est le suivant :

<?php 
$html_body = “<HTML><Body><H1>TEST</H1>My Picture<Img src=”my.gif”></Body></HTML>”; 
//输出结果中HTML标签将全部为小写字母 
echo preg_replace ( 
"/(<//?)(/w+)([^>]*>)/e", 
"&#39;//1&#39;.strtolower(&#39;//2&#39;).&#39;//3&#39;", //此处的模式变量//2将被strtolower转换为小写字符 
$html_body); 
?>

Résumé :

La fonction preg_replace utilise une expression régulière compatible Perl syntaxe, généralement une alternative plus rapide à ereg_replace. Si vous souhaitez uniquement effectuer un simple remplacement d'une chaîne, vous pouvez utiliser la fonction str_replace.

Recommandations associées :

Explication détaillée de la fonction preg_match_all dans les expressions régulières php


Explication détaillée de la fonction preg_match dans l'expression régulière php


Un cas de vérification d'une adresse e-mail avec une expression régulière php


Exemple d'analyse des expressions régulières php


Introduction détaillée aux expressions régulières php

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!

Déclaration:
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