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

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

青灯夜游
青灯夜游avant
2019-01-05 09:54:014135parcourir

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";

$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";

¤ 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";
}

¤ 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 ?12a6abe747567c04f8a60d1c1175f753 Format :

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

Recherche inversée : (?6d4886fa7555fc74951030ebd330356b字符宽度:零

验证零字符代码

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

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

echo "\n";

打印不出结果!

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

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

echo "\n";

 能打印出结果!

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

捕获数据

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

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

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

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

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

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

echo "\n";

> 避免捕获数据

   格式:(?:pattern)

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

>命名捕获组

   格式:(?P5e64257b369329e4ba4d555318eb64af) 调用方式 (?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";

运行结果

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

  格式:限定符?

     原理:"?":如果前面有限定符,会使用最小的数据。如“*”会取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";

结果1.

代码2

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

echo "\n";

结果2

代码3,使用“+”

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

echo "\n";

结果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";

结果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";

特殊字符 

特殊字符 解释
* 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";
}

 以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer