Heim  >  Artikel  >  Backend-Entwicklung  >  Reguläre PHP-POSIX-Ausdrücke

Reguläre PHP-POSIX-Ausdrücke

藏色散人
藏色散人nach vorne
2019-12-04 10:31:312257Durchsuche

1 Grundkenntnisse

Regulärer Ausdruck ist eine Möglichkeit, ein Textmuster zu beschreiben. Der exakte (wörtliche) Abgleich, den wir bisher verwendet haben, ist ebenfalls ein regulärer Ausdruck. Vorhin haben wir beispielsweise nach regulären Ausdrucksbegriffen wie „Shop“ und „Lieferung“ gesucht.

In PHP ähnelt das Abgleichen regulärer Ausdrücke eher einem strstr()-Abgleich als einem Gleichheitsvergleich, da es sich um eine Übereinstimmung mit einer bestimmten Position in einer Zeichenfolge handelt (wenn nicht angegeben, kann sie sich irgendwo in der Zeichenfolge befinden). eine weitere Zeichenfolge. Beispielsweise entspricht die Zeichenfolge „shop“ dem regulären Ausdruck „shop“. Es kann auch mit den regulären Ausdrücken „h“, „ho“ usw. übereinstimmen.

Zusätzlich zur genauen Zuordnung von Zeichen können Sie auch Sonderzeichen verwenden, um die Metabedeutung eines Ausdrucks anzugeben. Mithilfe von Sonderzeichen können Sie beispielsweise ein Muster angeben, das am Anfang oder Ende einer Zeichenfolge vorhanden sein muss, dass ein Teil des Musters wiederholt werden darf oder dass die Zeichen im Muster zu einem bestimmten Typ gehören. Darüber hinaus können Sie nach dem Vorkommen von Sonderzeichen suchen. Als Nächstes werden wir diese Änderungen einzeln besprechen.

2 Zeichensätze und Klassen

Durch die Verwendung von Zeichensätzen können sofort reguläre Ausdrücke bereitgestellt werden, die leistungsfähiger sind als exakte Übereinstimmungen. Zeichensätze können verwendet werden, um jedes Zeichen eines bestimmten Typs abzugleichen. Tatsächlich handelt es sich dabei um eine Art Platzhalterzeichen.

Zunächst können Sie ein Zeichen als Platzhalterzeichen verwenden, um jedes Zeichen außer dem Zeilenumbruchzeichen (n) zu ersetzen. Beispielsweise kann der reguläre Ausdruck:

.at

mit „cat“, „sat“, „mat“ usw. übereinstimmen. Typischerweise wird dieser Platzhalterabgleich für den Dateinamenabgleich in Betriebssystemen verwendet.

Mit regulären Ausdrücken können Sie jedoch genauer festlegen, welche Art von Zeichen Sie abgleichen möchten, und Sie können einen Satz angeben, zu dem die Zeichen gehören. Im vorherigen Beispiel stimmte der reguläre Ausdruck mit „cat“ und „mat“ überein, könnte aber auch mit „#at“ übereinstimmen. Wenn Sie es auf Zeichen zwischen a und z beschränken möchten, können Sie es wie folgt angeben:

[a-z]at

Alles, was in eckigen Klammern ([]) steht, ist eine Zeichenklasse – ein übereinstimmendes Zeichen. Der Zeichensatz, zu dem es gehört . Beachten Sie, dass der Ausdruck in eckigen Klammern nur einem Zeichen entspricht.

Wir können einen Satz auflisten, zum Beispiel:

[aeiou]

kann zur Darstellung von Vokalkonsonanten verwendet werden.

kann auch einen Bereich beschreiben, wie zuvor mit einem Bindestrich, oder einen Bereichssatz:

[a-zA-Z]

Dieser Bereichssatz repräsentiert einen beliebigen Groß- oder Kleinbuchstaben.

Darüber hinaus können Sets auch verwendet werden, um anzuzeigen, dass Zeichen nicht zu einem bestimmten Set gehören. Beispiel:

[^a-z]

kann verwendet werden, um jedes Zeichen zu finden, das nicht zwischen a und z liegt. Wenn das Caretzeichen (^) in eckige Klammern eingeschlossen ist, bedeutet es „Nein“. Wenn dieses Symbol außerhalb der eckigen Klammern verwendet wird, hat es eine andere Bedeutung, die wir später im Detail vorstellen werden.

3 Wiederholung

Leser möchten oft angeben, dass eine bestimmte Zeichenfolge oder Zeichenklasse mehr als einmal vorkommt. Sie können in regulären Ausdrücken stattdessen zwei Sonderzeichen verwenden. Das Symbol „*“ gibt an, dass das Muster 0 oder mehrere Male wiederholt werden kann, und das Symbol „+“ gibt an, dass das Muster ein oder mehrere Male wiederholt werden kann. Diese beiden Symbole sollten nach dem Ausdruck platziert werden, auf den reagiert werden soll.

Zum Beispiel:

[[:alnum:]]+

bedeutet „mindestens ein alphabetisches Zeichen“.

4 Unterausdrücke

Normalerweise ist es sehr nützlich, einen Ausdruck in mehrere Unterausdrücke zu unterteilen. Beispielsweise kann es bedeuten: „Zumindest diese Zeichenfolgen muss man sein.“ exakte Übereinstimmung“. Dies kann wie bei mathematischen Ausdrücken mithilfe von Klammern erfolgen.

Zum Beispiel:

(very)*large

kann mit „groß“, „sehr groß“, „sehr, sehr groß“ usw. übereinstimmen.

5 Anzahl der Unterausdrücke

kann als numerischer Ausdruck in geschweiften Klammern ({}) verwendet werden, um anzugeben, wie oft der Inhalt wiederholt werden darf. Sie können eine genaue Anzahl von Wiederholungen ({3} bedeutet dreimalige Wiederholungen) oder einen Wiederholungsbereich ({2, 4} bedeutet zwei- bis viermalige Wiederholungen) oder einen Wiederholungsbereich mit offenem Boden ({2, 4}) angeben. bedeutet 2- bis 4-malige Wiederholung).

Zum Beispiel:

(very){1,3}

bedeutet Übereinstimmung mit „sehr“, „sehr, sehr“ und „sehr, sehr, sehr“.

6 Die Positionierung am Anfang oder Ende einer Zeichenfolge

[a-z]-Muster entspricht jeder Zeichenfolge, die Kleinbuchstaben enthält. Es spielt keine Rolle, ob die Zeichenfolge nur ein Zeichen enthält oder in der gesamten längeren Zeichenfolge nur ein passendes Zeichen enthält.

Es ist auch möglich zu bestimmen, ob ein bestimmter Unterausdruck am Anfang, am Ende oder an beiden Positionen vorkommt. Dies ist nützlich, wenn Sie sicherstellen möchten, dass nur das gesuchte Wort und keine anderen Wörter in einer Zeichenfolge vorkommen.

Das Caretzeichen (^) wird am Anfang des regulären Ausdrucks verwendet, um anzuzeigen, dass die Teilzeichenfolge am Anfang der gesuchten Zeichenfolge stehen muss, und das Zeichen „$“ wird am Ende des regulären Ausdrucks verwendet , was die Teilzeichenfolge angibt. Muss am Ende der Zeichenfolge stehen.

Beispielsweise entspricht Folgendes dem Bob am Anfang der Zeichenfolge:

^bob

Dieses Muster entspricht Zeichenfolgen, bei denen com am Ende der Zeichenfolge steht:

com$

Endlich , dieses Das Muster sucht nach Zeichenfolgen, die nur ein Zeichen zwischen a und z enthalten:

^[a-z]$

7 branch

可以使用正则表达式中的一条竖线来表示一个选择。例如,如果要匹配com、edu或net,就可以使用如下所示的表达式:

com|edu|net

8 匹配特殊字符

如果要匹配本节前面提到过的特殊字符,例如,.、{或者$,就必须在它们前面加一个反斜杠(\)。如果要匹配一个反斜杠,则必须用两个反斜杠(\\)来表示。

在PHP中,必须将正则表达式模式包括在一个单引号字符串中。使用双引号引用的正则表达式将带来一些不必要的复杂性。PHP还使用反斜杠来转义特殊字符——例如反斜杠。

如果希望在模式中匹配一个反斜杠,必须使用两个反斜杠来表示它是一个反斜杠字符,而不是一个转义字符。

同样,由于相同的原因,如果希望在一个双引号引用的PHP字符串中使用反斜杠字符,必须使用两个反斜杠。这可 能会有些混淆,这样要求的结果将是表示一个包含了反斜杠字符的正则表达式的一个PHP字符串需要4个反斜杠。PHP解释器将这4个反斜杠解释成2个。然 后,由正则表达式解释器解析为一个。

$符号也是双引号引用的PHP字符串和正则表达式的特殊字符。要使一个$字符能够在模式中匹配,必须使用“\\\$”。因为这个字符串被引用在双引号中,PHP解释器将其解析为\$,而正则表达式解释器将其解析成一个$字符。

9 在智能表单中应用

在智能表单应用程序中,正则表达式至少有两种用途。第一种用途是在顾客的反馈中查找特定的名词。使用正则表达 式,可以做得更智能一些。使用一个字符串函数,如果希望匹配"shop"、"customer service"或"retail",就必须做3次不同的搜索。如果使用一个正则表达式,就可以同时匹配所有3个,如下所示:

shop|customer service|retail

第二个用途是验证程序中用户的电子邮件地址,这需要通过用正则表达式来对电子邮件地址的标准格式进行编码。这 个格式中包含一些数字或标点符号,接着是符号“@”,然后是包括文字或数字和字符组成的字符串,后面接着是一个“.”(点号),后面包括文字或数字以连字 符组成的字符串,可能还有更多的点号,直到字符串结束,它的编码如下所示:

^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$

子表达式^[a-zA-Z0-9_\-.]+表示“至少由一个字母、数字、下画线、连字符、点号或者这些字符组合为开始的字符串”。请注意,当在一个字符类的开始或末尾处使用点号时,点号将失去其特殊通配符的意义,只能成为一个点号字符。

符号“@”匹配字符“@”。

而子表达式[a-zA-Z0-9\-]+与包含文字数字字符和连字符的主机名匹配。请注意,我们去除了连字符,因为它是方括号内的特殊字符。

字符组合“\.”匹配“.”字符。我们在字符类外部使用点号,因此必须对其转义,使其能够匹配一个点号字符。

子表达式[a-zA-Z0-9\-\.]+$匹配域名的剩下部分,它包含字母、数字和连字符,如果需要还可包含更多的点号直到字符串的末尾。

不难发现,有时一个无效的电子邮件地址也会符合这个正则表达式。找到所有无效电子邮件几乎是不可能的,但是经 过分析,情形将会有所改善。可以按许多不同的方式精化这个表达式。例如,可以列出所有有效的顶级域(TLD)。当对某些对象进行限制的时候,请千万小心, 因为可能排斥1%的有效数据的校验函数比允许出现10%的无效数据的校验函数还要麻烦。

推荐:《PHP教程

Das obige ist der detaillierte Inhalt vonReguläre PHP-POSIX-Ausdrücke. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:aliyun.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen