


Zusammenfassung allgemeiner Funktionen, die in regulären PHP-Ausdrücken verwendet werden
Es gibt zwei Sätze von Funktionsbibliotheken für reguläre Ausdrücke in PHP. Ein Satz wird von der PCRE-Bibliothek (Perl Compatible Regular Expression) bereitgestellt. Die PCRE-Bibliothek implementiert den Mustervergleich für reguläre Ausdrücke unter Verwendung derselben Syntaxregeln wie Perl und verwendet Funktionen, die mit dem Präfix „preg_“ benannt sind. Der andere Satz wird von der POSIX-Erweiterungsbibliothek (Portable Operation System Interface) bereitgestellt. Erweiterte reguläre POSIX-Ausdrücke werden durch POSIX 1003.2 definiert und verwenden im Allgemeinen Funktionen, die mit dem Präfix „ereg_“ benannt sind.
Die Funktionen der beiden Funktionsbibliotheken sind ähnlich, die Ausführungseffizienz unterscheidet sich jedoch geringfügig. Um dieselbe Funktion zu erreichen, ist die Effizienz der Verwendung der PCRE-Bibliothek im Allgemeinen etwas höher. Seine Verwendung wird im Folgenden ausführlich beschrieben.
6.3.1 Regulärer Ausdrucksabgleich
1. preg_match()
Funktionsprototyp: int preg_match (string $pattern, string $content [, array $matches])
preg_match()-Funktion durchsucht den $content-String nach dem regulären Ausdruck, der durch $pattern Matching content angegeben wird. Wenn $matches angegeben ist, werden die übereinstimmenden Ergebnisse darin platziert. $matches[0] enthält den Text, der mit dem gesamten Muster übereinstimmt, $matches[1] enthält die erste erfasste Übereinstimmung des Musterelements in Klammern usw. Diese Funktion führt nur einen Match durch und gibt letztendlich die Anzahl der Matching-Ergebnisse von 0 oder 1 zurück. Listing 6.1 zeigt ein Codebeispiel für die Funktion preg_match().
Code 6.1 Datums- und Uhrzeitabgleich
<?php //需要匹配的字符串。date函数返回当前时间 $content = "Current date and time is ".date("Y-m-d h:i a").", we are learning PHP together."; //使用通常的方法匹配时间 if (preg_match ("/\d{4}-\d{2}-\d{2} \d{2}:\d{2} [ap]m/", $content, $m)) { echo "匹配的时间是:" .$m[0]. "\n"; } //由于时间的模式明显,也可以简单的匹配 if (preg_match ("/([\d-]{10}) ([\d:]{5} [ap]m)/", $content, $m)) { echo "当前日期是:" .$m[1]. "\n"; echo "当前时间是:" .$m[2]. "\n"; } ?>
Dies ist ein einfaches Beispiel für den dynamischen Textzeichenfolgenabgleich. Unter der Annahme, dass die aktuelle Systemzeit „13:25 Uhr am 17. August 2006“ ist, wird der folgende Inhalt ausgegeben.
Die passende Zeit ist: 17.08.2006 13:25 Uhr
Das aktuelle Datum ist: 17.08.2006
Die aktuelle Zeit ist: 13:25 Uhr
2. ereg() und eregi()
ereg() ist die Matching-Funktion für reguläre Ausdrücke in der POSIX-Erweiterungsbibliothek. eregi() ist eine Version der Funktion ereg(), die die Groß- und Kleinschreibung ignoriert. Beide haben ähnliche Funktionen wie preg_match, die Funktion gibt jedoch einen booleschen Wert zurück, der angibt, ob die Übereinstimmung erfolgreich war oder nicht. Es ist zu beachten, dass der erste Parameter der POSIX-Erweiterungsbibliotheksfunktion eine reguläre Ausdruckszeichenfolge akzeptiert, d. h. es ist kein Trennzeichen erforderlich. Listing 6.2 ist beispielsweise eine Methode zur Überprüfung der Sicherheit von Dateinamen.
Code 6.2 Sicherheitsprüfung des Dateinamens
<?php $username = $_SERVER['REMOTE_USER']; $filename = $_GET['file']; //对文件名进行过滤,以保证系统安全 if (!ereg('^[^./][^/]*$', $userfile)) { die('这不是一个非法的文件名!'); } //对用户名进行过滤 if (!ereg('^[^./][^/]*$', $username)) { die('这不是一个无效的用户名'); } //通过安全过滤,拼合文件路径 $thefile = "/home/$username/$filename"; ?>
Normalerweise ist die Verwendung der Perl-kompatiblen Funktion zum Abgleich regulärer Ausdrücke perg_match() schneller als die Verwendung von ereg() oder eregi() quick. Wenn Sie lediglich herausfinden möchten, ob ein String einen bestimmten Teilstring enthält, empfiehlt sich die Verwendung der Funktion strstr() oder strpos().
3. preg_grep()
Funktionsprototyp: Array preg_grep (String $pattern, Array $input)
Die Funktion preg_grep() gibt ein Array zurück, das die Zellen im $input-Array enthält, die dem angegebenen $pattern-Muster entsprechen. Preg_grep() führt außerdem nur einen Abgleich für jedes Element im Eingabearray $input durch. Das Beispiel in Listing 6.3 veranschaulicht lediglich die Verwendung der Funktion preg_grep().
Code 6.3 Array-Abfrageabgleich
<?php $subjects = array( "Mechanical Engineering", "Medicine", "Social Science", "Agriculture", "Commercial Science", "Politics" ); //匹配所有仅由有一个单词组成的科目名 $alonewords = preg_grep("/^[a-z]*$/i", $subjects); ?>
6.3.2 Globaler regulärer Ausdrucksabgleich
1. preg_match_all()
Ähnlich der Funktion preg_match(). Wenn der dritte Parameter verwendet wird, werden alle möglichen Übereinstimmungen gesetzt. Diese Funktion gibt die Anzahl der Übereinstimmungen mit dem gesamten Muster zurück (möglicherweise 0) und gibt False zurück, wenn ein Fehler auftritt. Nachfolgend finden Sie ein Beispiel für die Konvertierung einer URL-Linkadresse im Text in HTML-Code. Listing 6.4 ist ein Beispiel für die Verwendung der Funktion preg_match_all().
Code 6.4 Konvertieren Sie die Linkadresse im Text in HTML
<?php //功能:将文本中的链接地址转成HTML //输入:字符串 //输出:字符串 function url2html($text) { //匹配一个URL,直到出现空白为止 preg_match_all("/http:\/\/?[^\s]+/i", $text, $links); //设置页面显示URL地址的长度 $max_size = 40; foreach($links[0] as $link_url) { //计算URL的长度。如果超过$max_size的设置,则缩短。 $len = strlen($link_url); if($len > $max_size) { $link_text = substr($link_url, 0, $max_size)."..."; } else { $link_text = $link_url; } //生成HTML文字 $text = str_replace($link_url,"<a href='$link_url'>$link_text</a>",$text); } return $text; } //运行实例 $str = “这是一个包含多个URL链接地址的多行文字。欢迎访问http://www.php.cn”; print url2html($str); /*输出结果 这是一个包含多个URL链接地址的多行文字。欢迎访问<a href='http://www.php.cn'> http://www.php.cn</a> */ ?>
2. Mehrzeiliger Abgleich
Es ist unter POSIX schwierig, komplexe Abgleichsvorgänge nur mit regulären Tabellenfunktionen durchzuführen. Führen Sie beispielsweise passende Suchvorgänge für ganze Dateien durch (insbesondere für mehrzeiligen Text). Eine Möglichkeit, dies mit ereg() zu tun, besteht darin, es in separaten Zeilen zu tun. Das Beispiel in Listing 6.5 zeigt, wie ereg() die Parameter der INI-Datei einem Array zuweist.
Code 6.5 Mehrzeiliger Abgleich von Dateiinhalten
<?php $rows = file('php.ini'); //将php.ini文件读到数组中 //循环遍历 foreach($rows as $line) { If(trim($line)) { //将匹配成功的参数写入数组中 if(eregi("^([a-z0-9_.]*) *=(.*)", $line, $matches)) { $options[$matches[1]] = trim($matches[2]); } unset($matches); } } //输出参数结果 print_r($options); ?>
Tipps
Dies dient nur der einfacheren Veranschaulichung des Problems. Um eine *.ini-Datei zu analysieren, verwenden Sie am besten die Funktion parse_ini_file(). Diese Funktion analysiert die *.ini-Datei direkt in ein großes Array.
6.3.3 Ersetzung regulärer Ausdrücke
1. ereg_replace() und eregi_replace()
Funktionsprototyp: string ereg_replace (string $pattern, string $replacement, string $string)
string eregi_replace (string $pattern, string $replacement, string $string)
ereg_replace ()Suchen Sie nach der Musterzeichenfolge $pattern in $string und ersetzen Sie das übereinstimmende Ergebnis durch $replacement. Wenn $pattern Mustereinheiten (oder Untermuster) enthält, werden Positionen in der Form „1“ oder „$1“ in $replacement durch den Inhalt ersetzt, der mit diesen Untermustern übereinstimmt. Und"
<?php $lines = file('source.php'); //将文件读入数组中 for($i=0; $i<count($lines); $i++) { //将行末以“\\”或“#”开头的注释去掉 $lines[$i] = eregi_replace("(\/\/|#).*$", "", $lines[$i]); //将行末的空白消除 $lines[$i] = eregi_replace("[ \n\r\t\v\f]*$", "\r\n", $lines[$i]); } //整理后输出到页面 echo htmlspecialchars(join("",$lines)); ?>
2.preg_replace()
函数原型:mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject [, int $limit])
preg_replace较ereg_replace的功能更加强大。其前三个参数均可以使用数组;第四个参数$limit可以设置替换的次数,默认为全部替换。代码6.7是一个数组替换的应用实例。
代码6.7 数组替换
<?php //字符串 $string = "Name: {Name}<br>\nEmail: {Email}<br>\nAddress: {Address}<br>\n"; //模式 $patterns =array( "/{Address}/", "/{Name}/", "/{Email}/" ); //替换字串 $replacements = array ( "No.5, Wilson St., New York, U.S.A", "Thomas Ching", "tom@emailaddress.com", ); //输出模式替换结果 print preg_replace($patterns, $replacements, $string); ?>
输出结果如下。
Name: Thomas Ching",
Email: tom@emailaddress.com
Address: No.5, Wilson St., New York, U.S.A
在preg_replace的正则表达式中可以使用模式修正符“e”。其作用是将匹配结果用作表达式,并且可以进行重新运算。例如:
<?php $html_body = “<HTML><Body><H1>TEST</H1>My Picture<Img src=”my.gif”></Body></HTML>”; //输出结果中HTML标签将全部为小写字母 echo preg_replace ( "/(<\/?)(\w+)([^>]*>)/e", "'\\1'.strtolower('\\2').'\\3'", //此处的模式变量\\2将被strtolower转换为小写字符 $html_body); ?>
提示
preg_replace函数使用了Perl兼容正则表达式语法,通常是比ereg_replace更快的替代方案。如果仅对字符串做简单的替换,可以使用str_replace函数。
6.3.4 正则表达式的拆分
1.split()和spliti()
函数原型:array split (string $pattern, string $string [, int $limit])
本函数返回一个字符串数组,每个单元为$string经正则表达式$pattern作为边界分割出的子串。如 果设定了$limit,则返回的数组最多包含$limit个单元。而其中最后一个单元包含了$string中剩余的所有部分。spliti是split的 忽略大小版本。代码6.8是一个经常用到关于日期的示例。
代码6.8 日期的拆分
<?php $date = "08/30/2006"; //分隔符可以是斜线,点,或横线 list($month, $day, $year) = split ('[/.-]', $date); //输出为另一种时间格式 echo "Month: $month; Day: $day; Year: $year<br />\n"; ?>
2.preg_split()
本函数与split函数功能一致。代码6.9是一个查找文章中单词数量的示例。
代码6.9 查找文章中单词数量
<?php $seek = array(); $text = "I have a dream that one day I can make it. So just do it, nothing is impossible!"; //将字符串按空白,标点符号拆分(每个标点后也可能跟有空格) $words = preg_split("/[.,;!\s']\s*/", $text); foreach($words as $val) { $seek[strtolower($val)] ++; } echo "共有大约" .count($words). "个单词。"; echo "其中共有" .$seek['i']. "个单词“I”。"; ?>
提示
preg_split() 函数使用了Perl兼容正则表达式语法,通常是比split()更快的替代方案。使用正则表达式的方法分割字符串,可以使用更广泛的分隔字符。例如,上面 对日期格式和单词处理的分析。如果仅用某个特定的字符进行分割,建议使用explode()函数,它不调用正则表达式引擎,因此速度是最快的。
更多PHP 正则表达式常用函数使用小结相关文章请关注PHP中文网!
相关文章:

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

Lange URLs, die oft mit Schlüsselwörtern und Tracking -Parametern überfüllt sind, können Besucher abschrecken. Ein URL -Verkürzungsskript bietet eine Lösung, die präzise Links erstellt, die ideal für soziale Medien und andere Plattformen sind. Diese Skripte sind für einzelne Websites a wertvoll

Nach seiner hochkarätigen Akquisition durch Facebook im Jahr 2012 nahm Instagram zwei APIs für den Einsatz von Drittanbietern ein. Dies sind die Instagram -Graph -API und die Instagram Basic Display -API. Ein Entwickler, der eine App erstellt, die Informationen von a benötigt

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Dies ist der zweite und letzte Teil der Serie zum Aufbau einer Reaktionsanwendung mit einem Laravel-Back-End. Im ersten Teil der Serie haben wir eine erholsame API erstellt, die Laravel für eine grundlegende Produktlistenanwendung unter Verwendung von Laravel erstellt hat. In diesem Tutorial werden wir Dev sein

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Die 2025 PHP Landscape Survey untersucht die aktuellen PHP -Entwicklungstrends. Es untersucht Framework -Nutzung, Bereitstellungsmethoden und Herausforderungen, die darauf abzielen, Entwicklern und Unternehmen Einblicke zu geben. Die Umfrage erwartet das Wachstum der modernen PHP -Versio
