Maison >développement back-end >tutoriel php >Résumé des exemples de fonctions d'expressions régulières couramment utilisées en PHP

Résumé des exemples de fonctions d'expressions régulières couramment utilisées en PHP

伊谢尔伦
伊谢尔伦original
2017-06-27 11:34:241336parcourir

1. preg_match()

Prototype de fonction : int preg_match (string $pattern, string $content [, array $matches])
preg_match () fonction dans $contentstring Rechercher pour le contenu qui correspond à l' expression régulière donnée par $pattern. Si $matches est fourni, les résultats correspondants y sont placés. $matches[0] contiendra le texte qui correspond à l'ensemble 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 2016 », le contenu suivant sera affiché.
L'heure de correspondance est : 2016-08-17 01:25 pm
La date actuelle est : 2016-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 permettant de 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"; 
?>

Habituellement, il est préférable d'utiliser la fonction de correspondance d'expressions régulières compatible Perl perg_match() que d'utiliser ereg() ou eregi() est plus rapide. 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 remplace le résultat correspondant par $replacement. 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 : preg_replace mixte (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); 
?>

Astuce
La fonction preg_replace utilise une syntaxe d'expression régulière compatible Perl et constitue 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.

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