Maison > développement back-end > tutoriel php > Explication détaillée des expressions régulières en PHP (exemples de code)

Explication détaillée des expressions régulières en PHP (exemples de code)

易达
Libérer: 2023-04-08 17:58:02
original
3031 Les gens l'ont consulté

Objectifs de cet article :

1. Définition des expressions régulières

2. Plusieurs syntaxes de base des expressions régulières

(1) Définition des expressions régulières

L'expression régulière est une formule logique qui opère sur des chaînes, qui consiste à combiner certains caractères spécifiques en une chaîne régulière

Par exemple :

<?php
$p = &#39;/abc123/&#39;;
$str = "abc123bbbb";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则&#39;;
}
?>
Copier après la connexion

Le code ci-dessus Le '/abc123/' in est une expression régulière. Nous pouvons en voir que /abc123/ est une chaîne composée de caractères et de chiffres, mais ces caractères ont leurs propres significations particulières, comme /abc123/. La règle de cette expression régulière est que la chaîne commence par abc123. Toute chaîne qui correspond à cette règle correspondra à cette expression

(2) Plusieurs syntaxes de base des expressions régulières

1 Le modèle de correspondance régulier utilise des délimiteurs et des métacaractères. être n'importe quel caractère autre que des chiffres, des barres obliques inverses et des espaces. Délimiteurs courants tels que la barre oblique (/), le symbole de hachage (#) et le symbole de négation (~)

Par exemple :

/hello world/ La signification de l'expression Oui : La chaîne commence par hello world
#^[0-9]$# L'expression signifie : Faites correspondre les nombres 0-9
~hello~ L'expression signifie : La chaîne contient hello

Testons-le avec le code

Exemple 1,

/hello world/ L'expression signifie : La chaîne commence par hello world

<?php
$p = "/hello world/";
$str = "hello world,i am a student";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则/hello world/<br/>&#39;;
}

?>
Copier après la connexion

Le résultat en cours d'exécution est le suivant :

La chaîne est conforme à cette règle/bonjour tout le monde/

Changez la chaîne pour voir Ci-dessous, le résultat en cours d'exécution le fait ne commence pas par bonjour tout le monde

<?php
$p = "/hello world/";
$str = "helloworld,i am a student";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则/hello world/<br/>&#39;;
}

?>
Copier après la connexion

 :

Vide

Exemple 2,

#^[0-9]$# La signification de l'expression est : faire correspondre les nombres 0-9

<?php
$p2 = "#^[0-9]$#";
$str2 = "3";
if (preg_match($p2, $str2)) {
    echo &#39;该字符串符合这个规则"#^[0-9]$#<br/>&#39;;
}
?>
Copier après la connexion

Le résultat de l'exécution est :

La chaîne est conforme à cette règle "#^[0-9]$#

Changez le code, changez la chaîne en un nombre supérieur à 9 et voyez

<?php
$p2 = "#^[0-9]$#";
$str2 = "30";
if (preg_match($p2, $str2)) {
    echo &#39;该字符串符合这个规则"#^[0-9]$#<br/>&#39;;
}else{
    echo &#39;该字符串不符合这个规则"#^[0-9]$#<br/>&#39;;
}
?>
Copier après la connexion

exécuter le résultat est :

Cette chaîne n'est pas conforme à cette règle"#^[0-9]$#

Exemple 3,

~bonjour~ La signification de l'expression est : la chaîne contient bonjour

Le code spécifique est le suivant :

<?php
$p3 = "~hello~";
$str3 = "ahellobb";
if (preg_match($p3, $str3)) {
    echo &#39;该字符串符合这个规则:~hello~&#39;;
}else{
    echo &#39;该字符串不符合这个规则:~hello~&#39;;
}
?>
Copier après la connexion

Le résultat en cours d'exécution est :

La chaîne est conforme à cette règle : ~hello~

Maintenant, modifiez la chaîne de test pour qu'elle ne contienne pas hello

Le code spécifique est le suivant :

<?php
$p3 = "~hello~";
$str3 = "hell o";
if (preg_match($p3, $str3)) {
    echo &#39;该字符串符合这个规则:~hello~&#39;;
}else{
    echo &#39;该字符串不符合这个规则:~hello~&#39;;
}
?>
Copier après la connexion

Le résultat d'exécution est :

Cette chaîne n'est pas conforme à cette règle : ~bonjour~

On voit que :

1, / signifie le début

2 , ^ signifie commencer par le caractère après ^

3 $ signifie se terminer par le caractère avant $

~ signifie contenir le. ce qui signifie

2. Si Si le modèle contient des délimiteurs, les délimiteurs doivent être échappés à l'aide d'une barre oblique inverse ().

Par exemple :

/https://www./ signifie que cela commence par https://www

Le spécifique. le code est le suivant :

<?php
$p = "/https:\/\/www./";
$str = "https://www.baidu.com";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则:/https:\/\/www./&#39;;
}else{
    echo &#39;该字符串不符合这个规则:/https:\/\/www./&#39;;
}
Copier après la connexion

Le résultat d'exécution est :

La chaîne est conforme à cette règle : /https://www./

Essayez de changer la chaîne. Si elle ne commence pas par https://www., regardez

<?php
$p = "/https:\/\/www./";
$str = "http://www.baidu.com";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则:/https:\/\/www./&#39;;
}else{
    echo &#39;该字符串不符合这个规则:/https:\/\/www./&#39;;
}
Copier après la connexion

Le résultat est :

Cette chaîne fonctionne. ne respectez pas cette règle : /https:/ /www./

3. Si le motif contient de nombreux caractères délimiteurs, il est recommandé d'utiliser d'autres caractères comme délimiteurs, ou vous peut utiliser preg_quote pour s'échapper.

Exemple 1,

<?php

$p = "/https://www.baidu.com/a/b/index.html/";
$str = "http://www.baidu.com/a/b/index.html";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则:/https://www.baidu.com/a/b/index.html/&#39;;
}else{
    echo &#39;该字符串不符合这个规则:/https://www.baidu.com/a/b/index.html/&#39;;
}
Copier après la connexion

Le résultat en cours d'exécution est :

Avertissement : preg_match() : modificateur inconnu '/' dans D:E-classclass-codeclassingindex.php à la ligne 7
Cette chaîne n'est pas conforme à cette règle :/https://www.baidu.com/a/b/index.html/

Vous ne pouvez donc pas écrire directement à ce moment/Soit vous échappez comme ci-dessus, soit procédez comme suit

Le code spécifique est le suivant :

<?php
$p = "https://www.baidu.com/a/b/index.html";
$p = &#39;/&#39;.preg_quote($p, &#39;/&#39;).&#39;/&#39;;
$str = "https://www.baidu.com/a/b/index.html";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则:/https://www.baidu.com/a/b/index.html/&#39;;
}else{
    echo &#39;该字符串不符合这个规则:/https://www.baidu.com/a/b/index.html/&#39;;
}
?>
Copier après la connexion

Le résultat en cours d'exécution est :

Cette chaîne est conforme à cette règle : /https://www.baidu.com/a/b/index.html/

4. utilisez-le après le délimiteur. Modificateurs de motif, les modificateurs de motif incluent : i, m, s, etc.

Résumé :

i signifie que la casse peut être ignorée

1. 🎜>

2. m signifie correspondance multi-lignes

3. Si ce modificateur est défini, le métacaractère point (.) dans le motif correspond à tous les caractères, y compris les caractères de nouvelle ligne. Sans ce paramètre, les caractères de nouvelle ligne ne sont pas inclus.

Cas 1.

Objectifs pratiques :

1 je veux dire que ce cas peut être ignoré

<?php
$p = "/ABc/i";
$str = "abc";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则:/ABc/i&#39;;
}else{
    echo &#39;该字符串不符合这个规则:/ABc/i&#39;;
}
?>
Copier après la connexion

Le résultat en cours est. :

Cette chaîne est conforme à cette règle : /ABc/i

Cas 2,

Objectif pratique :

1. m représente une correspondance multi-lignes

Le code spécifique est le suivant :

<?php
$p = "/chinese/m";
$str = "i am a chinese people,\n you alose is a chinese people";
$math = "";
if (preg_match_all($p, $str,$math)) {
    echo &#39;该字符串符合这个规则:/chinese/m,匹配结果为:&#39;;
    print_r($math);
}else{
    echo &#39;该字符串不符合这个规则:/chinese/m&#39;;
}
?>
Copier après la connexion
Le résultat courant est :

Ceci chaîne est conforme à cette règle : /chinois/m, le résultat correspondant est : Array ( [0] => Array ( [0] => chinois [1] => chinois ) )

<🎜 >Ce qu'il faut noter ici, c'est qu'utilisez preg_match_all sinon avec preg_match cela ne correspondra qu'à une seule ligne <🎜>

接下来我们运行下效果

<?php
$p = "/chinese/m";
$str = "i am a chinese people,\n you alose is a chinese people";
$math = "";
if (preg_match($p, $str,$math)) {
    echo &#39;该字符串符合这个规则:/chinese/m,匹配结果为:&#39;;
    print_r($math);
}else{
    echo &#39;该字符串不符合这个规则:/chinese/m&#39;;
}
?>
Copier après la connexion

运行结果为:

该字符串符合这个规则:/chinese/m,匹配结果为:Array ( [0] => chinese )

其实/m在此也算多此一举,因为preg_match_all就是表示多行匹配了

<?php
$p = "/chinese/";
$str = "i am a chinese people,\n you alose is a chinese people";
$math = "";
if (preg_match_all($p, $str,$math)) {
    echo &#39;该字符串符合这个规则,匹配结果为:&#39;;
    print_r($math);
}else{
    echo &#39;该字符串不符合这个规则&#39;;
}

?>
Copier après la connexion

运行结果其实是一样的,结果为:

该字符串符合这个规则,匹配结果为:Array ( [0] => Array ( [0] => chinese [1] => chinese ) )

只是要知道m表示多行匹配的意思

案例三、

实践目标:

1、如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。

具体代码如下:

<?php
$p = "/chinese ./s";
$str = "i am a chinese \n people, you alose is a chinese good people";
$math = "";
if (preg_match_all($p, $str,$math)) {
    echo &#39;该字符串符合这个规则,匹配结果为:&#39;;
    print_r($math);
}else{
    echo &#39;该字符串不符合这个规则&#39;;
}
?>
Copier après la connexion

运行结果如下:

该字符串符合这个规则,匹配结果为:Array ( [0] => Array ( [0] => chinese [1] => chinese g ) )

说明第一个chinese 后面的字符是换行也匹配到了,这说明了s的意思就是.要包含换行符,接下来

我们去掉s,看下最终的结果

<?php
$p = "/chinese ./";
$str = "i am a chinese \n people, you alose is a chinese good people";
$math = "";
if (preg_match_all($p, $str,$math)) {
    echo &#39;该字符串符合这个规则,匹配结果为:&#39;;
    print_r($math);
}else{
    echo &#39;该字符串不符合这个规则&#39;;
}
?>
Copier après la connexion

运行结果如下:

该字符串符合这个规则,匹配结果为:Array ( [0] => Array ( [0] => chinese g ) )

说明此刻只匹配到一个了,因为.不包含换行符,所以第一个chinese没有匹配到

总结:

本文主要讲解了

1、正则表达式的定义

2、正则表达式的几个基本语法

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:php.cn
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