Heim  >  Artikel  >  Backend-Entwicklung  >  Gründe und Lösungen für das Scheitern der regulären PHP-Übereinstimmung aller Zeichen

Gründe und Lösungen für das Scheitern der regulären PHP-Übereinstimmung aller Zeichen

小云云
小云云Original
2018-03-31 14:31:302485Durchsuche

Dieser Artikel teilt Ihnen hauptsächlich die Gründe und Lösungen für das Scheitern der regulären PHP-Übereinstimmung aller Zeichen mit. Ich hoffe, dass er allen helfen kann.

<?php$str = &#39;
@@@@i ( PCRE_CASELESS)
如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。@@@@
m ( PCRE_MULTILINE)&#39;;// 正则1:$preg = &#39;/@@@@(.*)@@@@/&#39;; 无法匹配换行符\n// 正则2:$preg = &#39;/@@@@(.*)@@@@/s&#39;;// \s   匹配任意一个空白符,等价于[\f\n\r\t\v]// \S   匹配除空白符以外任何字符,等价于[^\f\n\r\t\v]preg_match_all( $preg, $str, $matches);

print_r($matches);// 结果1:Array(
    [0] => Array()
    [1] => Array()
)// 结果2:Array(
    [0] => Array
        (
            [0] => @@@@i ( PCRE_CASELESS)
如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。@@@@
        )
    [1] => Array
        (
            [0] => i ( PCRE_CASELESS)
如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。
        )

)

PHP-Modifikatoren für reguläre Ausdrücke:

  • i: Wenn dieser Modifikator festgelegt ist, werden Buchstaben im Muster ohne Berücksichtigung der Groß- und Kleinschreibung abgeglichen.

  • m: Standardmäßig geht PCRE davon aus, dass die Zielzeichenfolge aus einer einzelnen Zeichenzeile besteht (tatsächlich kann sie jedoch mehrere Zeilen enthalten), das Metazeichen „Zeilenanfang“ (^) stimmt nur mit dem Anfang überein der Zeichenfolge und das Metazeichen „Zeilenende“ (

    , das Setzen dieses Modifikators hat keine Auswirkung.

  • s: Wenn dieser Modifikator festgelegt ist, entspricht das Punkt-Metazeichen im Muster allen Zeichen, einschließlich Zeilenumbrüchen. Ohne diesen Modifikator entspricht dieser Modifikator dem Modifikator /s in Perl. Eine negierte Zeichenklasse wie [^a] entspricht immer einem Zeilenumbruchzeichen, unabhängig von der Einstellung dieses Modifikators. x: Wenn dieser Modifikator festgelegt ist, werden Leerzeichen im Muster angezeigt die nicht maskiert sind oder sich nicht in einer Zeichenklasse befinden, werden immer ignoriert und stehen zwischen einem nicht maskierten #-Zeichen außerhalb einer Zeichenklasse und dem nächsten Zeilenumbruchzeichen. Dieser Modifikator entspricht dem /x-Modifikator in Perl und ermöglicht dies Das kompilierte Muster soll Kommentare enthalten. Hinweis: Dies gilt nur für Datenzeichen, die weiterhin nicht in Sonderzeichenfolgen im Muster vorkommen können, z Durch diese Syntax definierte Zeichenfolge führt zum Beispiel zu einem Kompilierungsfehler ( ?( führt zu einem Fehler.) , nachdem die Ersetzung der Ersatzzeichenfolge durch einen Rückverweis durchgeführt wurde, wird die ersetzte Zeichenfolge als PHP-Code ausgewertet (Auswertungsfunktionsmethode) und das Ergebnis wird als tatsächliche Zeichenfolge verwendet, die an der Ersetzung beteiligt ist () und NULL-Zeichen werden bei der Rückreferenzersetzung mit Backslashes maskiert

  • A: Wenn dieser Modifikator festgelegt ist, muss das Muster ein „verankertes“ Muster sein bedeutet, dass die Suche nur am Anfang der Zielzeichenfolge erfolgen muss. Dieser Effekt kann auch mit dem entsprechenden Muster erstellt werden. Dies ist die einzige Möglichkeit, dieses Muster in Perl zu implementieren
  • D: Wenn dieser Modifikator festgelegt ist, stimmt das Metazeichen-Dollarzeichen im Muster nur mit dem Ende der Zielzeichenfolge überein. Wenn dieser Modifikator nicht festgelegt ist, stimmt auch das Dollarzeichen überein, wenn die Zeichenfolge mit einem Zeilenumbruchzeichen endet dieses Newline-Zeichen (aber kein vorangehendes Newline-Zeichen), wird dieser Modifikator ignoriert. In Perl gibt es keinen entsprechenden Modifikator. Wenn ein Muster mehrmals verwendet werden muss, lohnt es sich, etwas Zeit zu investieren, um die Übereinstimmungsgeschwindigkeit zu verbessern. Wenn dieser Modifikator festgelegt ist, wird diese zusätzliche Analyse nur für Nicht-Muster durchgeführt -verankerte Musterübereinstimmungen (d. h. ohne ein einzelnes festes Startzeichen). U: Dieser Modifikator kehrt den „gierigen“ Modus des Quantifizierers um. und es kann durch Befolgen des Quantifizierers gierig gemacht werden. Dies ist das Gleiche wie Perl ist inkompatibel. Es kann auch mithilfe der In-Mode-Modifikatoreinstellung (?U) oder eines Fragezeichens nach dem Quantifizierer festgelegt werden, um es als nicht zu markieren -gierig (z. B. .*?).
  • Tip
    请确保replacement参数由合法php代码字符串组成, 否则php将会 在preg_replace()调用的行上 产生一个解释错误.
    Note: 仅 preg_replace()使用此修饰符, 其他PCRE函数忽略此修饰符.
  • X: Dieser Modifikator aktiviert die Anhangsfunktion, die mit PCRE und Perl nicht kompatibel ist. Jeder Backslash im Muster, gefolgt von einem Zeichen ohne besondere Bedeutung verursachen einen Fehler, daher werden diese Zeichen beibehalten, um die Abwärtskompatibilität sicherzustellen. Merkmale Standardmäßig wird in Perl ein Backslash gefolgt von einem Zeichen ohne besondere Bedeutung als Originaltext dieses Zeichens betrachtet werden durch diesen Modifikator gesteuert.
  • J: Interne Optionseinstellung (?J) ermöglicht, dass Untergruppen doppelte Namen haben Option, externe /J-Einstellung führt zu einem Fehler.)
  • u: Dieser Modifikator aktiviert eine zusätzliche Funktion, die mit Perl nicht kompatibel ist. Dies gilt als UTF-8 Modifikator ist ab Unix-Version PHP 4.1.0 oder höher verfügbar, Win32-Version PHP 4.2.3. Ab sofort verfügbar. PHP 4.3.5 beginnt mit der Überprüfung von Mustern auf UTF-8-Gültigkeit.

Das obige ist der detaillierte Inhalt vonGründe und Lösungen für das Scheitern der regulären PHP-Übereinstimmung aller Zeichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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