正则表达式之正则处理函数
前面我们已经学习了正则表达式的基础语法,包括了定界符、原子、元字符和模式修正 符。实际上正则表达式想要起作用的话,就必须借用正则表达式处理函数。本节我们就来介绍一下PHP中基于perl的正则表达式处理函数,主要包含了分割, 匹配,查找,替换等等处理操作,依旧是配合示例讲解,让我们开始吧。
和正则表达式一样,正则表达式处理函数不能够独立使用,而这必须相结合,才能够完成特定的功能。在前面我们也说过,基于perl的正则表达式要快于POXIS正则表达式处理函数,所以我们只介绍以preg开头的基于perl的正则表达式。注意:在能偶使用字符串函数处理的时候,就不要使用正则表达式来处理字符串,因为字符串处理函数更快。
下面我们来看一些常用的正则表达式处理函数。
1,preg_match()函数。
函数preg_match()执行一个正则表达式匹配,其定义如下:
<ol class="dp-c"><li class="alt"><span><span>int preg_match ( string </span><span class="vars">$pattern</span><span> , string </span><span class="vars">$subject</span><span> [, </span><span class="keyword">array</span><span> &</span><span class="vars">$matches</span><span> [, int </span><span class="vars">$flags</span><span> = 0 [, int </span><span class="vars">$offset</span><span> = 0 ]]] ) </span></span></li></ol>
实际上就是搜索subject中匹配pattern的部分, 以保存在数组matches中.请看示例:
<ol class="dp-c"> <li class="alt"><span><span><?php </span></span></span></li> <li><span> </span></li> <li class="alt"> <span> </span><span class="vars">$pattern</span><span> = </span><span class="string">'/<b>.*?</b>/'</span><span>; </span> </li> <li> <span> </span><span class="vars">$string</span><span> = </span><span class="string">'<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas'</span><span>; </span> </li> <li class="alt"> <span> </span><span class="keyword">if</span><span> (preg_match(</span><span class="vars">$pattern</span><span>, </span><span class="vars">$string</span><span>, </span><span class="vars">$arr</span><span>)) { </span> </li> <li> <span> </span><span class="func">echo</span><span> </span><span class="string">"正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"</span><span>; </span> </li> <li class="alt"> <span> print_r(</span><span class="vars">$arr</span><span>); </span> </li> <li> <span> } </span><span class="keyword">else</span><span> { </span> </li> <li class="alt"> <span> </span><span class="func">echo</span><span> </span><span class="string">"<font>正则表达式{$pattern}和字符串{$string}匹配失败</font>"</span><span>; </span> </li> <li><span> } </span></li> <li class="alt"><span> ?> </span></li> <li><span> </span></li> </ol>
函数preg_match_all()函数执行一个全局正则表达式匹配,其定义和preg_match()函数一致,只不过匹配了全部结果。请看示例:
<ol class="dp-c"> <li class="alt"><span><span><?php </span></span></span></li> <li> <span> </span><span class="vars">$pattern</span><span> = </span><span class="string">'/<b>.*?</b>/'</span><span>; </span> </li> <li class="alt"> <span> </span><span class="vars">$string</span><span> = </span><span class="string">'<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas'</span><span>; </span> </li> <li> <span> </span><span class="keyword">if</span><span> (preg_match_all(</span><span class="vars">$pattern</span><span>, </span><span class="vars">$string</span><span>, </span><span class="vars">$arr</span><span>)) { </span> </li> <li class="alt"> <span> </span><span class="func">echo</span><span> </span><span class="string">"正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"</span><span>; </span> </li> <li> <span> print_r(</span><span class="vars">$arr</span><span>); </span> </li> <li class="alt"> <span> } </span><span class="keyword">else</span><span> { </span> </li> <li> <span> </span><span class="func">echo</span><span> </span><span class="string">"<font>正则表达式{$pattern}和字符串{$string}匹配失败</font>"</span><span>; </span> </li> <li class="alt"><span> } </span></li> <li><span> ?> </span></li> <li class="alt"><span> </span></li> </ol>
依旧是上面的示例(只换了正则处理函数为preg_match_all()),但是匹配的结果数组内容不一样了。
3, preg_replace()函数
函数preg_replace()执行一个正则表达式替换,其定义如下:
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
实际上就是搜索subject中匹配pattern的部分, 以replacement进行替换.其中limit指的是每个模式在每个subject上进行替换的最大次数. 默认是 -1(无限). 如果指定count,将会被填充为完成的替换次数.
注意:
A,如果subject是一个数组, preg_replace()返回一个数组, 其他情况下返回一个字符串.
B,如果匹配被查找到, 替换后的subject被返回, 其他情况下返回没有改变的subject. 如果发生错误, 返回NULL .
C,子模式可以应用到参数replacement中,使用方式为n或者${n}。(在正则表达式的模式中我们只能使用n的形式来获取已经匹配的子模式,切记!)
D,如果使用模式修正符e,则参数replacement中可以解析函数。(在其它的正则表达式处理函数中,模式修正符e均被忽略!)
请看下面的综合示例:
<ol class="dp-c"> <li class="alt"><span><span><?php </span></span></span></li> <li> <span> </span><span class="vars">$pattern</span><span> = </span><span class="string">'/(php)|(mysql)/e'</span><span>; </span> </li> <li class="alt"> <span> </span><span class="vars">$string</span><span> = </span><span class="string">'这个字符串中的php和mysql被替换成大写的了!'</span><span>; </span> </li> <li> <span> </span><span class="vars">$result</span><span> = preg_replace(</span><span class="vars">$pattern</span><span>, </span><span class="string">'strtoupper("${1}2")'</span><span>, </span><span class="vars">$string</span><span>, -1, </span><span class="vars">$count</span><span>); </span> </li> <li class="alt"> <span> </span><span class="func">echo</span><span> </span><span class="vars">$result</span><span>.</span><span class="string">'<br>'</span><span>; </span> </li> <li> <span> </span><span class="func">echo</span><span> </span><span class="vars">$count</span><span>; </span> </li> <li class="alt"><span>?> </span></li> </ol>
上例中,我们使用了模式修正符e,这样的话strtoupper()函数就可以当作字符串被解析,这就是模式修正符e的作用!而参数${1}和2分别是子模式1和子模式2。上例的作用就是将字符串$string中匹配到的子模式php和mysql替换成大写字母!
4,preg_split()函数。
preg_split执行一个正则表达式分隔字符串。其定义如下:
array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
实际上就是将subject按照pattern分割,返回分割后的数组。其中,limit将限制分隔得到的子串最多只有limit个, 返回的最后一个子串将包含所有剩余部分.limit值为-1, 0或null时都代表"不限制"。
我们来看一个示例:
<ol class="dp-c"> <li class="alt"><span><span><?php </span></span></span></li> <li> <span> </span><span class="vars">$pattern</span><span> = </span><span class="string">'/<p>(.*?)</p>/'</span><span>; </span> </li> <li class="alt"> <span> </span><span class="vars">$string</span><span> = </span><span class="string">'这个字符串中的<p>php</p>和<p>mysql</p>被分割了!'</span><span>; </span> </li> <li> <span> </span><span class="vars">$result</span><span> = preg_split(</span><span class="vars">$pattern</span><span>, </span><span class="vars">$string</span><span>, -1, PREG_SPLIT_DELIM_CAPTURE); </span> </li> <li class="alt"> <span> print_r(</span><span class="vars">$result</span><span>); </span> </li> <li><span> ?> </span></li> <li class="alt"><span> </span></li> </ol>
上例中,我们使用了常量PREG_SPLIT_DELIM_CAPTURE设 置返回结果中包含子模式(如果设置为PREG_SPLIT_NO_EMPTY,preg_split()将进返回分隔后的非空部分。)我们如果把上例中正 则表达式的括号去掉,则结果中不再包含php和mysql这两个匹配成功的子模式。
常用的正则表达式处理函数我们就介绍完了,本节的例子可能会难一些,但希望大家还是认真的试验并体会一下,后面的正则表达式应用部分,我们会经常使用正则表达式处理函数。
原文地址:

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Die Go-Sprache bietet zwei Technologien zur dynamischen Funktionserstellung: Schließung und Reflexion. Abschlüsse ermöglichen den Zugriff auf Variablen innerhalb des Abschlussbereichs, und durch Reflektion können mithilfe der FuncOf-Funktion neue Funktionen erstellt werden. Diese Technologien sind nützlich bei der Anpassung von HTTP-Routern, der Implementierung hochgradig anpassbarer Systeme und dem Aufbau steckbarer Komponenten.

Bei der Benennung von C++-Funktionen ist es wichtig, die Reihenfolge der Parameter zu berücksichtigen, um die Lesbarkeit zu verbessern, Fehler zu reduzieren und das Refactoring zu erleichtern. Zu den gängigen Konventionen für die Parameterreihenfolge gehören: Aktion-Objekt, Objekt-Aktion, semantische Bedeutung und Einhaltung der Standardbibliothek. Die optimale Reihenfolge hängt vom Zweck der Funktion, den Parametertypen, möglichen Verwirrungen und Sprachkonventionen ab.

Reguläre Golang-Ausdrücke verwenden das Pipe-Zeichen |, um mehrere Wörter oder Zeichenfolgen abzugleichen, wobei jede Option als logischer ODER-Ausdruck getrennt wird. Zum Beispiel: Entspricht „fox“ oder „dog“: fox|dog entspricht „quick“, „brown“ oder „lazy“: (quick|brown|lazy) entspricht „Go“, „Python“ oder „Java“: Go| Python |Java sucht nach Wörtern oder 4-stelligen Postleitzahlen: ([a-zA

Der Schlüssel zum Schreiben effizienter und wartbarer Java-Funktionen ist: Halten Sie es einfach. Verwenden Sie eine aussagekräftige Benennung. Bewältigen Sie besondere Situationen. Nutzen Sie entsprechende Sichtbarkeit.

1. Die SUMME-Funktion wird verwendet, um die Zahlen in einer Spalte oder einer Gruppe von Zellen zu summieren, zum Beispiel: =SUMME(A1:J10). 2. Die Funktion AVERAGE wird verwendet, um den Durchschnitt der Zahlen in einer Spalte oder einer Gruppe von Zellen zu berechnen, zum Beispiel: =AVERAGE(A1:A10). 3. COUNT-Funktion, die verwendet wird, um die Anzahl der Zahlen oder Texte in einer Spalte oder einer Gruppe von Zellen zu zählen, zum Beispiel: =COUNT(A1:A10) 4. IF-Funktion, die verwendet wird, um logische Urteile auf der Grundlage spezifizierter Bedingungen zu treffen und die zurückzugeben entsprechendes Ergebnis.

Zu den Vorteilen von Standardparametern in C++-Funktionen gehören die Vereinfachung von Aufrufen, die Verbesserung der Lesbarkeit und die Vermeidung von Fehlern. Die Nachteile sind eingeschränkte Flexibilität und Namensbeschränkungen. Zu den Vorteilen variadischer Parameter gehören unbegrenzte Flexibilität und dynamische Bindung. Zu den Nachteilen gehören eine größere Komplexität, implizite Typkonvertierungen und Schwierigkeiten beim Debuggen.

Zu den Vorteilen von Funktionen, die Referenztypen in C++ zurückgeben, gehören: Leistungsverbesserungen: Durch die Übergabe als Referenz wird das Kopieren von Objekten vermieden, wodurch Speicher und Zeit gespart werden. Direkte Änderung: Der Aufrufer kann das zurückgegebene Referenzobjekt direkt ändern, ohne es neu zuzuweisen. Einfachheit des Codes: Die Übergabe als Referenz vereinfacht den Code und erfordert keine zusätzlichen Zuweisungsvorgänge.

Der Lambda-Ausdruck ist eine anonyme Funktion ohne Namen und seine Syntax lautet: (parameter_list)->Ausdruck. Sie zeichnen sich durch Anonymität, Vielfalt, Currying und Schließung aus. In praktischen Anwendungen können Lambda-Ausdrücke verwendet werden, um Funktionen prägnant zu definieren, beispielsweise die Summationsfunktion sum_lambda=lambdax,y:x+y, und die Funktion map() auf die Liste anzuwenden, um die Summationsoperation durchzuführen.
