Heim >Backend-Entwicklung >PHP-Tutorial >PHP-regulärer Ausdruck

PHP-regulärer Ausdruck

WBOY
WBOYOriginal
2016-08-08 09:20:07885Durchsuche

Was ist ein regulärer Ausdruck?

Ein regulärer Ausdruck ist eine logische Formel, die mit Zeichenfolgen arbeitet und einige bestimmte Zeichen zu einer regulären Zeichenfolge kombiniert Man nennt es ein reguläres Matching-Muster.

$p = '/apple/'; $str = "apple banna"; if (preg_match($p, $str)) { echo 'matched'; }

Die Zeichenfolge „/apple/“ ist ein regulärer Ausdruck, der verwendet wird, um abzugleichen, ob die Apfelzeichenfolge in der Quellzeichenfolge vorhanden ist.

Die PCRE-Bibliotheksfunktion wird in PHP verwendet, um einen regulären Abgleich durchzuführen. Beispielsweise wird preg_match im obigen Beispiel verwendet, um einen regulären Abgleich durchzuführen und wird häufig verwendet, um zu bestimmen, ob ein Typ von Zeichenmuster vorhanden ist.

Grundlegende Syntax regulärer Ausdrücke

In der PCRE-Bibliotheksfunktion verwendet das reguläre Übereinstimmungsmuster Trennzeichen und Metazeichen Trennzeichen können alle Zeichen außer Zahlen, Backslashes und Leerzeichen sein. Häufig verwendete Trennzeichen sind Schrägstrich (/), Raute-Symbol (#) und Negationssymbol (~), zum Beispiel:

/foo bar/ #^[^0-9]$# ~php~

Wenn das Muster Trennzeichen enthält, müssen Trennzeichen vorhanden sein mit backslash() maskiert werden.

/http:\/\//

Wenn das Muster viele Trennzeichen enthält, wird empfohlen, andere Zeichen als Trennzeichen zu verwenden, oder Sie können preg_quote als Escapezeichen verwenden.

$p = 'http://'; $p = '/'.preg_quote($p, '/').'/'; echo $p;

Mustermodifikatoren können nach dem Trennzeichen verwendet werden. Zu den Mustermodifikatoren gehören: i, m, s, x usw. Durch die Verwendung des i-Modifikators kann beispielsweise die Groß-/Kleinschreibung ignoriert werden:

$str = "Http://www.imooc.com/"; if (preg_match('/http/i', $str)) { echo '匹配成功'; }

Metazeichen und Escapezeichen

haben in regulären Ausdrücken eine besondere Bedeutung. Die Zeichen werden als Metazeichen bezeichnet:

Sie werden im Allgemeinen verwendet, um die Zeichen
^ zu maskieren, um die Startposition des Ziels (oder der Zeile im Mehrzeilenmodus) festzulegen ).start)
$ Legt die Endposition des Ziels fest (oder das Zeilenende im Mehrzeilenmodus)
Entspricht jedem Zeichen außer Newline (Standard)
[Startzeichenklassendefinition
] Endzeichen Klassendefinition
|. Startet einen optionalen Zweig
(Start-Tag der Untergruppe
). Als Quantifizierer, der 0 oder 1 Übereinstimmungen anzeigt. Wird nach dem Quantifizierer platziert, um die gierige Natur des Quantifizierers zu ändern. (Quantifizierer nachschlagen)
* Quantifizierer, 0 oder mehr Übereinstimmungen
+ Quantifizierer, 1 oder mehr Übereinstimmungen
{ Benutzerdefiniertes Quantifizierer-Start-Tag
} Benutzerdefiniertes Quantifizierer-End-Tag

//下面的\s匹配任意的空白符,包括空格,制表符,换行符。[^\s]代表非空白符。[^\s]+表示一次或多次匹配非空白符。 $p = '/^我[^\s]+(苹果|香蕉)$/'; $str = "我喜欢吃苹果"; if (preg_match($p, $str)) { echo '匹配成功'; }

Für Metazeichen gibt es zwei Verwendungsszenarien: Zum einen können sie überall verwendet werden, zum anderen können sie nur in eckigen Klammern verwendet werden:

Das Escape-Zeichen ^ gibt nur bei Verwendung als erstes Zeichen (in eckigen Klammern) die Negation der Zeichenklasse an
- markiert den Zeichenbereich

Wobei ^ außerhalb der hinteren Klammer steht und die Startposition des Assertionsziels angibt, innerhalb der eckigen Klammern jedoch die Negation der Zeichenklasse darstellt. Das Minuszeichen in den eckigen Klammern kann den Zeichenbereich markieren, z. B. 0 -9. Alle Zahlen zwischen 0 und 9.

//下面的\w匹配字母或数字或下划线。 $p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/'; $str = "我的邮箱是Spark.eric@imooc.com"; preg_match($p, $str, $match); echo $match[0];

Gieriger Modus und Lazy-Modus

Jeder der regulären Ausdrücke The Wenn das Metazeichen mit einem Zeichen übereinstimmt, werden so viele Zeichen wie möglich angezeigt. Wenn jedoch das Fragezeichen verwendet wird, werden so wenige Zeichen wie möglich verwendet.

Gieriger Modus: Priorisieren Sie den Abgleich, wenn er abgeglichen werden kann oder nicht.

//下面的\d表示匹配数字 $p = '/\d+\-\d+/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:010-12345678

Lazy-Modus: Wenn er abgeglichen werden kann oder nicht übereinstimmend, wird es zuerst abgeglichen. Wenn wir keine Übereinstimmung finden

$p = '/\d?\-\d?/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:0-1

, wenn wir die Länge der übereinstimmenden Zeichen genau kennen, können wir {} verwenden, um die Anzahl der übereinstimmenden Zeichen anzugeben

$p = '/\d{3}\-\d{8}/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:010-12345678

Verwenden Sie reguläre Ausdrücke zum Abgleichen

Der Zweck der Verwendung regulärer Ausdrücke soll eine bessere Leistung erzielen als die Zeichenfolgenverarbeitung. Die Funktion verfügt über eine flexiblere Verarbeitungsmethode. Daher wird sie wie die Zeichenfolgenverarbeitungsfunktion hauptsächlich verwendet, um festzustellen, ob eine Teilzeichenfolge vorhanden ist, Zeichenfolgen zu ersetzen, Zeichenfolgen aufzuteilen, Musterteilzeichenfolgen zu erhalten usw.

PHP verwendet die PCRE-Bibliotheksfunktion, um eine reguläre Verarbeitung durchzuführen, indem das Muster festgelegt und dann die entsprechende Verarbeitungsfunktion aufgerufen wird, um das passende Ergebnis zu erhalten.

preg_match wird verwendet, um einen Abgleich durchzuführen. Es kann einfach verwendet werden, um festzustellen, ob das Muster erfolgreich übereinstimmt, oder um ein Abgleichsergebnis zu erhalten. 0 oder 1. In Die Suche stoppt nach 1 Treffer.

$subject = "abcdef"; $pattern = '/def/'; preg_match($pattern, $subject, $matches); print_r($matches); //结果为:Array ( [0] => def )

Der obige Code führt einfach einen Abgleich durch und bestimmt einfach, ob def erfolgreich abgeglichen werden kann, aber die Stärke regulärer Ausdrücke liegt im Musterabgleich, sodass mehr Muster auftreten verwendet:

$subject = "abcdef"; $pattern = '/a(.*?)d/'; preg_match($pattern, $subject, $matches); print_r($matches); //结果为:Array ( [0] => abcd [1] => bc )

Reguläre Ausdrücke können verwendet werden, um ein Muster abzugleichen und nützlichere Daten zu erhalten.

查找所有匹配结果

preg_match只能匹配一次结果,但很多时候我们需要匹配所有的结果,preg_match_all可以循环获取一个列表的匹配结果数组。

$p = "|<[^>]+>(.*?)]+>|i"; $str = "example:
this is a test
"; preg_match_all($p, $str, $matches); print_r($matches);

可以使用preg_match_all匹配一个表格中的数据:

$p = "/(.*?)<\/td>\s*(.*?)<\/td>\s*<\/tr>/i"; $str = "
Eric25
John26
"; preg_match_all($p, $str, $matches); print_r($matches);

$matches结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推。

正则表达式的搜索和替换

正则表达式的搜索与替换在某些方面具有重要用途,比如调整目标字符串的格式,改变目标字符串中匹配字符串的顺序等。

例如我们可以简单的调整字符串的日期格式:

$string = 'April 15, 2014'; $pattern = '/(\w+) (\d+), (\d+)/i'; $replacement = '$3, ${1} $2'; echo preg_replace($pattern, $replacement, $string); //结果为:2014, April 15

其中${1}与$1的写法是等效的,表示第一个匹配的字串,$2代表第二个匹配的。

通过复杂的模式,我们可以更加精确的替换目标字符串的内容。

$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/', '/^\s*{(\w+)}\s*=/'); $replace = array ('\3/\4/\1\2', '$\1 =');//\3等效于$3,\4等效于$4,依次类推 echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27'); //结果为:$startDate = 5/27/1999 //详细解释下结果:(19|20)表示取19或者20中任意一个数字,(\d{2})表示两个数字,(\d{1,2})表示1个或2个数字,(\d{1,2})表示1个或2个数字。^\s*{(\w+)\s*=}表示以任意空格开头的,并且包含在{}中的字符,并且以任意空格结尾的,最后有个=号的。

用正则替换来去掉多余的空格与字符:

$str = 'one two'; $str = preg_replace('/\s+/', ' ', $str); echo $str; // 结果改变为'one two'

正则匹配常用案例

正则匹配常用在表单验证上,一些字段会有一定的格式要求,比如用户名一般都要求必须是字母、数字或下划线组成,邮箱、电话等也都有自己的规则,因此使用正则表达式可以很好的对这些字段进行验证。

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了php正则表达式,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
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