Maison > développement back-end > tutoriel php > Une brève discussion sur les expressions régulières en PHP

Une brève discussion sur les expressions régulières en PHP

青灯夜游
Libérer: 2023-04-04 16:56:01
avant
4188 Les gens l'ont consulté

Cet article vous présentera les expressions régulières PHP.Il a une certaine valeur de référence.Les amis dans le besoin peuvent s'y référer.J'espère qu'il vous sera utile.

Mind Map

Cliquez sur l'image ci-dessous pour voir le contenu spécifique !

Introduction

Expressions régulières, tout le monde devrait être en développement C'est souvent utilisé. De nos jours, de nombreux langages de développement ont des applications d'expressions régulières, telles que javascript, java, .net, php, etc. Aujourd'hui, je vais partager avec vous ma compréhension des expressions régulières. . Conseil!

Termes que vous devez connaître - Que savez-vous des termes suivants ?

Δ Délimiteur

Δ Champ de caractères

Δ Modificateur

Δ Qualificateur

Δ Caret

Δ Wildcard (pré-vérification avant, pré-vérification inverse)

Δ Référence arrière

Δ Correspondance paresseuse

Δ Commentaires

Δ Largeur de caractère nulle

Positionnement

Quand utilisons-nous Qu'en est-il du standard expressions ? Il ne suffit pas d'utiliser des expressions régulières pour toutes les opérations sur les caractères. PHP utilise des expressions régulières dans certains aspects, ce qui affecte en réalité l'efficacité. Lorsque nous rencontrons l'analyse de données textuelles complexes, l'utilisation d'expressions régulières est un meilleur choix.

Avantages

Les expressions régulières peuvent améliorer l'efficacité du travail lorsqu'il s'agit d'opérations de caractères complexes, et également vous faire économiser dans une certaine mesure quantité de code.

Inconvénients

Lorsque nous utilisons des expressions régulières, des expressions régulières complexes augmenteront la complexité du code, ce qui est très frustrant Difficile comprendre. Nous devons donc parfois ajouter des commentaires dans les expressions régulières.

Mode commun

¤ Délimiteur, utilisez généralement "/" comme délimiteur pour commencer et terminer, vous pouvez également utiliser "#".

Quand devez-vous utiliser "#" ? Généralement, c'est lorsqu'il y a beaucoup de caractères "/" dans votre chaîne, car ces caractères doivent être échappés lors de l'utilisation d'expressions régulières, comme uri.

Le code utilisant le délimiteur "/" est le suivant.

$regex = '/^http:\/\/([\w.]+)\/([\w]+)\/([\w]+)\.html$/i';
$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

$matches[0] dans preg_match contiendra la chaîne correspondant à l'intégralité du motif.

Le code utilisant le délimiteur "#" est le suivant A ce moment, n'échappe pas à "/" !

$regex = '#^http://([\w.]+)/([\w]+)/([\w]+)\.html$#i';
$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

¤ Modificateur : utilisé pour changer. Le comportement des expressions régulières.

Ce que nous voyons ('/^http://([w.]+)/([w]+)/([w]+).html/ i') Le dernier "i" est le modificateur, ce qui signifie ignorer la casse. Un autre que nous utilisons souvent est "x" qui signifie ignorer les espaces.

Code de contribution :

$regex = '/HELLO/';
$str = 'hello word';
$matches = array();

if(preg_match($regex, $str, $matches)){
    echo 'No i:Valid Successful!',"\n";
}

if(preg_match($regex.'i', $str, $matches)){
    echo 'YES i:Valid Successful!',"\n";
}
Copier après la connexion

¤ Champ de caractère : [w] La partie développée entre crochets est le champ de caractère.

¤ Qualificateur : Tel que [w]{3,5} ou [w]* ou [w]+ Les symboles après [w] représentent tous des qualificatifs. La signification spécifique est maintenant introduite.

{3,5} signifie 3 à 5 caractères. {3,} comporte plus de 3 caractères, {,5} comporte jusqu'à 5 caractères et {3} comporte trois caractères.

* signifie 0 à plus

* signifie 1 ou plus.

¤ Le curseur

^:

> placé dans un champ de caractère (tel que : [^w]) signifie la négation (c'est-à-dire ne pas inclure) - —"Sélection inversée"

    > Placé avant l'expression, cela signifie commencer par le caractère courant. (/^n/i, signifie commencer par n).

Notez que nous appelons souvent "" "caractère d'échappement". Utilisé pour échapper à certains symboles spéciaux, tels que ".", "/"

Caractères génériques (lookarounds) : Affirmer la présence ou l'absence de certains caractères dans certaines chaînes !

Il existe deux types de recherches : les recherches anticipées (recherche directe ?=) et les recherches derrière (recherche inversée ?<=).

> Format :

Recherche directe : (?=) Le (?!) correspondant signifie une signification négative

Recherche inversée : (?< =) Le correspondant ( ?

suivie des caractères

$regex = &#39;/(?<=c)d(?=e)/&#39;;  /* d 前面紧跟c, d 后面紧跟e*/
$str = &#39;abcdefgk&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

une signification négative :

$regex = &#39;/(?<!c)d(?!e)/&#39;;  /* d 前面不紧跟c, d 后面不紧跟e*/
$str = &#39;abcdefgk&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

>字符宽度:零

验证零字符代码

$regex = &#39;/HE(?=L)LO/i&#39;;
$str = &#39;HELLO&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

打印不出结果!

$regex = &#39;/HE(?=L)LLO/i&#39;;
$str = &#39;HELLO&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

能打印出结果!

说明:(?=L)意思是HE后面紧跟一个L字符。但是(?=L)本身不占字符,要与(L)区分,(L)本身占一个字符。

捕获数据

没有指明类型而进行的分组,将会被获取,供以后使用。

> 指明类型指的是通配符。所以只有圆括号起始位置没有问号的才能被捕捉。

> 在同一个表达式内的引用叫做反向引用。

> 调用格式: \编号(如\1)。

$regex = &#39;/^(Chuanshanjia)[\w\s!]+\1$/&#39;;    
$str = &#39;Chuanshanjia thank Chuanshanjia&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

> 避免捕获数据

格式:(?:pattern)

优点:将使有效反向引用数量保持在最小,代码更加、清楚。

>命名捕获组

格式:(?P<组名>) 调用方式 (?P=组名)

$regex = &#39;/(?P<author>chuanshanjia)[\s]Is[\s](?P=author)/i&#39;;
$str = &#39;author:chuanshanjia Is chuanshanjia&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

运行结果

惰性匹配(记住:会进行两部操作,请看下面的原理部分)

  格式:限定符?

原理:"?":如果前面有限定符,会使用最小的数据。如“*”会取0个,而“+”会取1个,如过是{3,5}会取3个。

先看下面的两个代码:

代码1.

<?php
$regex = &#39;/heL*/i&#39;;
$str = &#39;heLLLLLLLLLLLLLLLL&#39;;
if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

结果1.

代码2

<?php
$regex = &#39;/heL*?/i&#39;;
$str = &#39;heLLLLLLLLLLLLLLLL&#39;;
if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

结果2

代码3,使用“+”

<?php
$regex = &#39;/heL+?/i&#39;;
$str = &#39;heLLLLLLLLLLLLLLLL&#39;;
if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

结果3

代码4,使用{3,5}

<?php
$regex = &#39;/heL{3,10}?/i&#39;;
$str = &#39;heLLLLLLLLLLLLLLLL&#39;;
if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

结果4

正则表达式的注释

格式:(?# 注释内容)

用途:主要用于复杂的注释

贡献代码:是一个用于连接MYSQL数据库的正则表达式

$regex = &#39;/
    ^host=(?<!\.)([\d.]+)(?!\.)                 (?#主机地址)
\|
    ([\w!@#$%^&*()_+\-]+)                       (?#用户名)
\|
    ([\w!@#$%^&*()_+\-]+)                       (?#密码)
(?!\|)$/ix&#39;;

$str = &#39;host=192.168.10.221|root|123456&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
Copier après la connexion

特殊字符

特殊字符解释
*0到多次
+1到多次还可以写成{1,}
?0或1次
.匹配除换行符外的所有单个的字符
\w[a-zA-Z0-9_]
\s空白字符(空格,换行符,回车符)[\t\n\r]
\d[0-9]

案例汇总

1、PHP中文匹配

<?php
$str = "PHP编程";
if (preg_match("/([0-9a-zA-Z\x{4e00}-\x{9fa5}]+)/u",$str, $matches)) {
    var_dump($matches);
    echo "\n";
}
Copier après la connexion

 以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注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!

Étiquettes associées:
source:cnblogs.com
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