English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP 基础教程

PHP 高级教程

PHP & MySQL

PHP 参考手册

PHP-Regulärer Ausdruck

在本教程中,您将学习正则表达式的工作方式,以及如何使用它们在PHP中以高效的方式执行模式匹配。

什么是正则表达式

正则表达式通常称为“ regex ”或“ RegExp ,是一种特殊格式的文本字符串,用于查找文本中的模式。正则表达式是当今可用的功能最强大的工具之一,可以有效地处理和操纵文本。例如,它可以用于验证用户输入的数据格式(例如,姓名,电子邮件,电话号码等)是否正确,在文本内容中查找或替换匹配的字符串,等等。

PHP(版本5.3PHP(Versionund höheren Versionen) unterstützen durch ihre preg_-Funktionsserie reguläre Perl-Stil-Ausdrücke. Warum Perl-Stil-Ausdrücke verwenden? Weil Perl (Praktische Extraktion und Berichtssprache

)ist die erste Hauptprogramming Sprache, die integrierte Unterstützung für reguläre Ausdrücke bietet, und ist bekannt für ihre starke Unterstützung für reguläre Ausdrücke sowie für ihre bemerkenswerten Textverarbeitung und -manipulation.

Bevor wir in die Welt der regulären Ausdrücke eintauchen, lassen Sie uns zunächst die gängigen PHP-eigenen Musterpassungsfunktionen kurz vorstellen.Funktion
Beschreibungpreg_match()
Führen Sie eine reguläre Ausdrucksübereinstimmung durch.preg_match_all()
Führen Sie eine globale reguläre Ausdrucksübereinstimmung durch.preg_replace()
Führen Sie eine reguläre Ausdruckssearch und Ersetzung durch.preg_grep()
Geben Sie die Elemente des Eingabearrays zurück, die dem Muster entsprechen.preg_split()
Verwenden Sie reguläre Ausdrücke, um Zeichenfolgen in Teilzeichenfolgen zu zerlegen.preg_quote()

Zitieren Sie die regulären Ausdruckszeichen, die in der Zeichenkette gefunden wurden. Hinweis:

Die PHP-Funktion preg_match() beendet die Suche nach dem ersten Treffer und die Funktion preg_match_all() sucht weiter bis zum Ende der Zeichenkette und findet alle möglichen Treffer, anstatt am ersten Treffer zu stoppen.

Regulärer Ausdrucks语法Die Syntax der regulären Ausdrücke umfasst die Verwendung von speziellen Zeichen (bitte verwechseln Sie sie nicht mitHTML-Spezialzeichen * Verwirrung)。In regulären Ausdrücken haben die folgenden Zeichen eine spezielle Bedeutung:. + ?

[ ] ( ) { } ^ $ | \. Jedes Mal, wenn Sie sie wörtlich verwenden möchten, müssen Sie einen Backslash verwenden. Zum Beispiel, um einen Punkt zu passen, müssen Sie\. schreiben. Alle anderen Zeichen werden automatisch in ihrem wörtlichen Sinne verwendet.

Die folgenden Abschnitte beschreiben die verschiedenen Optionen, die zur Erstellung von Mustern verwendet werden können:

Zeichensatz

Die eckigen Klammern um den Zeichensatz werden als Zeichensatzbezeichner bezeichnet, zum Beispiel[ABC]. Ein Zeichensatz entspricht immer einem einzelnen Buchstaben aus der angegebenen Zeichenliste, was bedeutet, dass der Ausdruck[abc]nur die Buchstaben a, b oder c entspricht.

Sie können auch einen negativen Zeichensatz definieren, um jeden Buchstaben außer den in Klammern enthaltenen zu passen. Ein negativer Zeichensatz wird definiert, indem der Akutzeichen (^)-Zeichen direkt nach dem linken Klammern angefügt wird, zum Beispiel[^abc].-)mit Bindestrichen() um den Zeichensatzbereich [0-9Lassen Sie uns einige Beispiele für Zeichensätze ansehen:

正则表达式它能做什么
[abc]Passen Sie auf jeden Buchstaben von a, b oder c.
[^abc]Passen Sie auf jeden Buchstaben außer a, b, c.
[a-z]Passen Sie auf jeden Kleinbuchstaben von kleinbuchstabe a bis kleinbuchstabe z.
[A-Z]Passen Sie auf jeden Buchstaben von Großbuchstabe A bis Großbuchstabe Z.
[a-Z]Passen Sie jeden Buchstaben von klein a bis groß A.
[0-9]Passen Sie 0 bis9zwischen einer Ziffer.
[a-z0-9]Passen Sie a bis z oder 0 bis9zwischen einem einzelnen Zeichen.

Nachfolgender Beispiel zeigt Ihnen, wie Sie mit dem regulären Ausdruck und der PHP-Funktion preg_match() prüfen, ob ein Muster in einer Zeichenkette vorhanden ist:

<?php
$pattern = "/ca[kf]e/";
$text = "He was eating cake in the cafe.";
if(preg_match($pattern, $text)){
    echo "Übereinstimmung gefunden!";
} else {
    echo "Keine Übereinstimmung gefunden.";
{}
?>
测试看看‹/›

Gleichzeitig können Sie die Funktion preg_match_all() verwenden, um alle Übereinstimmungen in einer Zeichenkette zu finden:

<?php
$pattern = "/ca[kf]e/";
$text = "He was eating cake in the cafe.";
$matches = preg_match_all($pattern, $text, $array);
echo $matches . " matches were found.";
?>
测试看看‹/›

Hinweis:Reguläre Ausdrücke sind nicht PHP-exklusiv. Java, Perl, Python und andere Sprachen verwenden die gleichen Symbole, um Textmuster zu finden.

Prädefinierte Zeichenklassen

Einige Zeichenklassen (z.B. Ziffern, Buchstaben und Leerzeichen) werden so häufig verwendet, dass sie kurze Namen haben. Die nachstehende Tabelle zeigt diese prädefinierten Zeichenklassen:

Kürzel它能做什么
.Passen Sie jeden einzelnen Zeichen, mit Ausnahme des Zeilenumbruchs \n.
\dPassen Sie alle numerischen Zeichen. Entspricht [0-9] identisch.
\DPassen Sie alle nicht-numerischen Zeichen. Entspricht [^0-9] identisch
\sPassen Sie alle Leerzeichen (Leerzeichen, Tabulator, Zeilenumbruch oder Rückgabepfeil). Entspricht [\t\n\r].
\SPassen Sie alle nicht-leeren Zeichen. Entspricht [^\t\n\r]
\wPassen Sie alle wortartigen Zeichen (definiert als a bis z, A bis Z, 0 bis9und Unterstrichen). Entspricht [a-zA-Z_0-9] identisch
\WPassen Sie alle nicht-wortartigen Zeichen. Entspricht [^a-Za-Z_0-9] identisch

Nachfolgender Beispiel zeigt Ihnen, wie Sie mit dem regulären Ausdruck und der PHP-Funktion preg_replace() Leerzeichen in einer Zeichenkette finden und ersetzen können:

<?php
$pattern = "/\s/";
$replacement = ""-";
$text = "Earth revolves around\nthe\tSun";
//Ersetzen von Leerzeichen, Zeilenumbruch und Tabulator
echo preg_replace($pattern, $replacement, $text);
echo "<br>";
//Nur Leerzeichen ersetzen
echo str_replace(" ", ""-"$text);
?>
测试看看‹/›

Wiederholungsquantoren

Im vorherigen Abschnitt haben wir gelernt, wie man auf verschiedene Weise einzelne Zeichen abgleichen kann. Aber was tun, wenn Sie mehrere Zeichen abgleichen möchten? Zum Beispiel, wenn Sie nach einem Wort suchen, das eine oder mehrere Instanzen des Buchstaben 'p' enthält, oder ein Wort, das mindestens zwei 'p' enthält, und so weiter. Dies ist der Ort, an dem Quantoren ins Spiel kommen. Mit Quantoren können Sie angeben, wie oft ein Zeichen im regulären Ausdruck abgeglichen werden soll.

Die nachstehende Tabelle zeigt verschiedene Methoden zur Quantifizierung spezifischer Muster:

正则表达式它能做什么
p+匹配一个或多个字母p。
p*匹配零个或多个出现的字母p。
p?匹配零个或一个出现的字母p。
p{2{}正好匹配两个字母p。
p{2,3{}匹配至少两个出现的字母p,但不超过三个出现的字母p。
p{2,}

匹配两次或超过2次出现的字母p。

p{3{}最多匹配三个出现的字母p

以下示例中的正则表达式将使用PHP preg_split()函数将字符串分割为逗号,逗号序列,空格或它们的组合:

<?php
$pattern = "/[\s,]+/";
$text = "My favourite colors are red, green and blue";
$parts = preg_split($pattern, $text);
 
//循环遍历$parts数组并显示子字符串
foreach($parts as $part){
    echo $part . "<br>";
{}
?>
测试看看‹/›

位置锚

在某些情况下,您希望在行、词或字符串的开头或结尾进行匹配。要做到这一点,您可以使用锚点。两个常见的锚点是表示字符串开始的插入符号(^)和表示字符串结束的美元符号($)。

正则表达式它能做什么
^p与行首的字母p匹配。
p$与行尾的字母p匹配。

在以下示例中,正则表达式将仅使用PHP preg_grep()函数显示名称数组中以字母“J”开头的名称:

<?php
$pattern = "/^J/";
$names = array("Jhon Carter", "Clark Kent", "John Rambo");
$matches = preg_grep($pattern, $names);
 
//遍历$matches数组并显示匹配的名称
foreach($matches as $match){
    echo $match . "<br>";
{}
?>
测试看看‹/›

模式修饰符

模式修饰符允许您指定模式匹配的处理方式。模式修饰符直接放置在正则表达式之后,例如,如果要以不区分大小写的方式搜索模式,则可以使用 i 修饰符,如下所示:/pattern/i。下表列出了一些最常用的模式修饰符。

修饰符它能做什么
i使匹配不区分大小写。
m更改^和$的行为以匹配换行符边界(即多行字符串中每行的开始或结束),而不是字符串边界。
g执行全局匹配,即找到所有匹配项。
o仅对表达式求值一次。
s更改(点)的行为以匹配所有字符,包括换行符。
x允许您在正则表达式中使用空格和注释以保持清晰度。

以下示例将向您展示如何使用i修饰符和PHP preg_match_all()函数执行不区分大小写的全局搜索。

<?php
$pattern = "/color/i";
$text = "Color red is more visible than color blue in daylight.";
$matches = preg_match_all($pattern, $text, $array);
echo $matches . " matches were found.";
?>
测试看看‹/›

同样,以下示例显示如何使用^锚点和m修饰符与PHP preg_match_all()函数在多行字符串的每一行的开头进行匹配。

<?php
$pattern = "/^color/im";
$text = "Color red is more visible than \ncolor blue in daylight.";
$matches = preg_match_all($pattern, $text, $array);
echo $matches . " matches were found.";
?>
测试看看‹/›

词边界

单词边界字符(\b)可帮助您搜索以模式开头和/或结尾的单词。例如,正则表达式/\bcar/匹配以模式car开头的单词,并匹配cart, carrot, 或 cartoon,但不匹配oscar。

同样,正则表达式/car\b/匹配以模式car结尾的单词,并且匹配scar, oscar, 或 supercar,但不匹配cart。同样,/\bcar\b/匹配以单词car开头和结尾的单词,并且仅匹配单词car。

以下示例将以粗体突出显示以car开头的单词:

<?php
$pattern = '/\bcar\w*/';
$replacement = '<b>$0</b>';
$text = 'Words begining with car: cart, carrot, cartoon. Words ending with car: scar, oscar, supercar.';
echo preg_replace($pattern, $replacement, $text);
?>
测试看看‹/›

我们希望您已经了解了正则表达式的基础知识。要了解如何使用正则表达式验证表单数据,请查看有关PHP表单验证的教程。