Heim > Backend-Entwicklung > PHP-Tutorial > Eine kurze Diskussion über reguläre Ausdrücke in PHP

Eine kurze Diskussion über reguläre Ausdrücke in PHP

青灯夜游
Freigeben: 2023-04-04 16:56:01
nach vorne
4186 Leute haben es durchsucht

Dieser Artikel stellt Ihnen die regulären Ausdrücke von PHP vor. Ich hoffe, dass er Ihnen als Referenz dienen wird.

Mind Map

Klicken Sie auf das Bild unten, um den spezifischen Inhalt anzuzeigen!

Einführung

Reguläre Ausdrücke, jeder sollte sich in der Entwicklung befinden. Das ist so Heutzutage gibt es in vielen Entwicklungssprachen reguläre Ausdrucksanwendungen wie Javascript, Java, .net, PHP usw. Heute werde ich Ihnen mein Verständnis von regulären Ausdrücken mitteilen . Beratung!

Begriffe, die Sie kennen müssen – Wie viel wissen Sie über die folgenden Begriffe?

Δ Trennzeichen

Δ Zeichenfeld

Δ Modifikator

Δ Qualifizierer

Δ Caret

Δ Platzhalter (Vorwärts-Vorprüfung, Rückwärts-Vorprüfung)

Δ Rückverweis

Δ Lazy Match

Δ Kommentare

Δ Nullzeichenbreite

Positionierung

Wann verwenden wir Was ist mit normal? Ausdrücke? Es reicht nicht aus, für alle Zeichenoperationen reguläre Ausdrücke zu verwenden. PHP verwendet in einigen Aspekten reguläre Ausdrücke, was sich tatsächlich auf die Effizienz auswirkt. Wenn wir auf das Parsen komplexer Textdaten stoßen, ist die Verwendung regulärer Ausdrücke die bessere Wahl.

Vorteile

Reguläre Ausdrücke können die Arbeitseffizienz verbessern beim Umgang mit komplexen Zeichenoperationen und Ihnen bis zu einem gewissen Grad die Kosten ersparen Menge an Code.

Nachteile

Wenn wir reguläre Ausdrücke verwenden, erhöhen komplexe reguläre Ausdrücke die Komplexität des Codes, was sehr frustrierend schwierig ist verstehen. Daher müssen wir manchmal Kommentare in reguläre Ausdrücke einfügen.

Gemeinsamer Modus

¤ Trennzeichen, normalerweise verwenden Sie „/“ als Trennzeichen für Anfang und Ende, Sie können auch „#“ verwenden.

Wann sollten Sie „#“ verwenden? Im Allgemeinen ist dies der Fall, wenn Ihre Zeichenfolge viele „/“-Zeichen enthält, da solche Zeichen während des regulären Ausdrucks maskiert werden müssen, z als uri .

Der Code, der das Trennzeichen „/“ verwendet, lautet wie folgt.

$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";
Nach dem Login kopieren

$matches[0] in preg_match enthält die Zeichenfolge, die mit dem gesamten Muster übereinstimmt.

Der Code, der das Trennzeichen „#“ verwendet, lautet wie folgt: entgeht „/“ nicht!

$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";
Nach dem Login kopieren

¤ Modifikator: Wird zum Ändern des regulären Codes verwendet Ausdrucksstilverhalten.

Was wir sehen ('/^http://([w.]+)/([w]+)/([w]+).html/ i') Das letzte „i“ darin ist der Modifikator, der bedeutet, dass die Groß- und Kleinschreibung ignoriert wird. Ein anderes, das wir häufig verwenden, ist „x“, was bedeutet, dass Leerzeichen ignoriert werden.

Beitragscode:

$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";
}
Nach dem Login kopieren

¤ Zeichenfeld: [w] Der mit eckigen Klammern erweiterte Teil ist das Zeichenfeld.

¤ Qualifizierer: Zum Beispiel [w]{3,5} oder [w]* oder [w]+. Die Symbole nach [w] stehen alle für Qualifikatoren. Die konkrete Bedeutung wird nun eingeführt.

{3,5} bedeutet 3 bis 5 Zeichen. {3,} besteht aus mehr als 3 Zeichen, {,5} aus bis zu 5 Zeichen und {3} aus drei Zeichen.

* bedeutet 0 bis mehr

* bedeutet 1 oder mehr.

¤ Das Caretzeichen

^:

> in einem Zeichenfeld (z. B. [^w]) bedeutet Negation (d. h. nicht einschließen) - —„Auswahl umkehren“

    > Wird vor dem Ausdruck platziert und bedeutet, dass mit dem aktuellen Zeichen begonnen wird. (/^n/i, bedeutet, mit n zu beginnen).

Beachten Sie, dass wir „“ oft als „Escape-Zeichen“ bezeichnen. Wird verwendet, um einige Sonderzeichen wie „.“ oder „/“ zu maskieren.

Platzhalter (Lookarounds): Bestätigen das Vorhandensein oder Fehlen bestimmter Zeichen in bestimmten Zeichenfolgen!

Es gibt zwei Arten von Lookarounds: Lookaheads (Vorwärts-Lookup ?=) und Lookbehinds (Reverse-Lookup?<=).

> Format:

Vorwärtssuche: (?=) Das entsprechende (?!) bedeutet negative Bedeutung

Rückwärtssuche: (?< =) Das entsprechende ( ?

gefolgt von den Zeichen

$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";
Nach dem Login kopieren

negative Bedeutung:

$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";
Nach dem Login kopieren

>字符宽度:零

验证零字符代码

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

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

echo "\n";
Nach dem Login kopieren

打印不出结果!

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

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

echo "\n";
Nach dem Login kopieren

能打印出结果!

说明:(?=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";
Nach dem Login kopieren

> 避免捕获数据

格式:(?: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";
Nach dem Login kopieren

运行结果

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

  格式:限定符?

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

结果1.

代码2

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

echo "\n";
Nach dem Login kopieren

结果2

代码3,使用“+”

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

echo "\n";
Nach dem Login kopieren

结果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";
Nach dem Login kopieren

结果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";
Nach dem Login kopieren

特殊字符

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

 以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über reguläre Ausdrücke in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage