Maison  >  Article  >  développement back-end  >  php : Comparaison des exemples d'utilisation de preg_match et preg_match_all

php : Comparaison des exemples d'utilisation de preg_match et preg_match_all

伊谢尔伦
伊谢尔伦original
2017-06-24 15:35:331798parcourir

Application des expressions régulières en PHP

Dans les applications PHP, les expressions régulières sont principalement utilisées pour :
• Correspondance régulière : Faites correspondre le contenu correspondant selon l'expression régulière
• Remplacement régulier : Faites correspondre le contenu selon l'expression régulière et remplacez
• Split régulier : Divisez la chaîne selon l'expression régulière
Il existe deux types de fonctions d'expression régulière en PHP, l'une est la fonction d'expression régulière compatible Perl et l'autre est la fonction d'expression régulière étendue POSIX. Il n'y a pas beaucoup de différence entre les deux et il est recommandé d'utiliser des fonctions d'expression régulière compatibles Perl, donc ce qui suit utilise des fonctions d'expression régulière compatibles Perl comme exemples.
Délimiteur
Fonction d'expression régulière du mode de compatibilité Perl, l'expression régulière doit être écrite dans le délimiteur. Tout caractère qui n'est pas une lettre, un chiffre ou une barre oblique inverse () peut être utilisé comme délimiteur. Habituellement, nous utilisons / comme délimiteur. Voir les exemples ci-dessous pour une utilisation spécifique.
Conseils
Bien que les expressions régulières soient très puissantes, si cela peut être fait avec des fonctions de traitement de chaînes ordinaires, essayez de ne pas utiliser de fonctions d'expression régulière, car beaucoup d'expressions régulières seront très inefficaces. À propos des fonctions de traitement de chaînes ordinaires. La fonction
preg_match()
preg_match() est utilisée pour la correspondance d'expressions régulières. Elle renvoie 1 avec succès, sinon elle renvoie 0.
Syntaxe :
int preg_match (modèle de chaîne, sujet de chaîne [, correspondances de tableau])
Description du paramètre :

tr>
Paramètres Description
modèle Expression régulière
sujet Besoin de correspondre à l'objet récupéré
correspondances Facultatif, Array
参数 说明
pattern 正则表达式
subject 需要匹配检索的对象
matches 可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推
, $matches[0] contiendra le texte qui correspond au motif entier, $matches[1] contiendra le texte qui correspond au sous-motif dans le premier crochet capturé, et ainsi de suite

Exemple 1 :

<?php
if(preg_match("/php/i", "PHP is the web scripting language of choice.", $matches)){
    print "A match was found:". $matches[0];
} else {
    print "A match was not found.";
}
?>

Sortie du navigateur :

A match was found: PHP

Dans Dans cet exemple, en raison de l'utilisation du modificateur i, php sera mis en correspondance dans le texte sans tenir compte de la casse.
Conseils
preg_match() cessera de correspondre après la première correspondance réussie. Si vous souhaitez faire correspondre tous les résultats, c'est-à-dire rechercher jusqu'à la fin du sujet, vous devez utiliser preg_match_all. () fonction.
Exemple 2, obtenez le nom de domaine hôte à partir d'une URL :

<?php
// 从 URL 中取得主机名
preg_match("/^(http://)?([^/]+)/i","http://www.php.cn/index.html", $matches);
$host = $matches[2];
// 从主机名中取得后面两段
preg_match("/[^./]+.[^./]+$/", $host, $matches);
echo "域名为:{$matches[0]}";
?>

Sortie du navigateur :

Le nom de domaine est : php.cn


preg_match_all()
la fonction preg_match_all() est utilisée pour la correspondance globale des expressions. Renvoie le nombre de fois où le modèle entier a été mis en correspondance en cas de succès (éventuellement zéro), ou FALSE en cas d'erreur.
Syntaxe :
int preg_match_all (modèle de chaîne, sujet de chaîne, correspondances de tableau [, drapeaux int])
Description du paramètre :

Paramètres Description modèle Expression régulière sujet Besoin de correspondre à l'objet récupéré correspondances Tableau pour stocker les résultats correspondants drapeaux
参数 说明
pattern 正则表达式
subject 需要匹配检索的对象
matches 存储匹配结果的数组
flags

可选,指定匹配结果放入 matches 中的顺序,可供选择的标记有:

  1. PREG_PATTERN_ORDER:默认,对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推

  2. PREG_SET_ORDER:对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推

  3. PREG_OFFSET_CAPTURE:如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量

Facultatif, spécifiez la correspondance L'ordre dans lequel les résultats sont mis en correspondances, les balises disponibles sont :


  1. PREG_PATTERN_ORDER : Par défaut, les résultats sont triés de manière à ce que $matches[ 0] est un tableau de toutes les correspondances de modèles, $matches[1] est un tableau de chaînes correspondant au sous-modèle dans la première parenthèse, et ainsi de suite
  2. PREG_SET_ORDER : trier les results Soit $matches[0] le tableau du premier ensemble de correspondances, $matches[1] le tableau du deuxième ensemble de correspondances, et ainsi de suite

  3. PREG_OFFSET_CAPTURE : Si définie, cette balise renvoie également son décalage de chaîne associé pour chaque résultat correspondant
    <?php
    $str = "<pre class="brush:php;toolbar:false">学习php是一件快乐的事。
    所有的phper需要共同努力!
    "; $kw = "php"; preg_match_all('/
    ([sS]*?)
    /',$str,$mat); for($i=0;$i'.$kw.'', $mat[0][$i]); $str = str_replace($mat[1][$i], $mat[0][$i], $str); } echo $str; ?>

L'exemple suivant montre l'affichage de tous mots-clés (php) dans les balises e03b848252eb9375d56be284e690e873bc5574f69a0cba105bc93bd3dc13c4ec dans le texte en rouge.



Caractères chinois correspondants réguliers Les caractères chinois correspondants réguliers sont légèrement différents selon l'encodage de la page :

<?php
$str = "学习php是一件快乐的事。";
preg_match_all("/[x80-xff]+/", $str, $match);
//UTF-8 使用:
//preg_match_all("/[x{4e00}-x{9fa5}]+/u", $str, $match);
print_r($match);
?>
•Encodage GBK/GB2312 : [x80-xff>]+ ou [xa1-xff]+

•Encodage UTF-8 : [x{4e00}-x{9fa5}]+/u

Exemple :
Array
(
    [0] => Array
        (
            [0] => 学习
            [1] => 是一件快乐的事。
        )
)


Sortie :

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