Suche…


Syntax

  • preg_replace($pattern, $replacement, $subject, $limit = -1, $count = 0);
  • preg_replace_callback($pattern, $callback, $subject, $limit = -1, $count = 0);
  • preg_match($pattern, $subject, &$matches, $flags = 0, $offset = 0);
  • preg_match_all($pattern, $subject, &$matches, $flags = PREG_PATTERN_ORDER, $offset = 0);
  • preg_split($pattern, $subject, $limit = -1, $flags = 0)

Parameter

Parameter Einzelheiten
$pattern eine Zeichenfolge mit einem regulären Ausdruck (PCRE-Muster)

Bemerkungen

Regelmäßige PHP-Ausdrücke folgen den PCRE-Musterstandards, die von regulären Perl-Ausdrücken abgeleitet werden.

Alle PCRE-Zeichenfolgen in PHP müssen mit Trennzeichen eingeschlossen werden. Ein Trennzeichen kann ein beliebiges nicht alphanumerisches Zeichen, kein Backslash und kein Whitespace-Zeichen sein. Beliebte Trennzeichen sind beispielsweise ~ , / , % .

PCRE-Muster können Gruppen, Zeichenklassen, Zeichengruppen, Look-Ahead- / Look-Behind-Assertions und Escape-Zeichen enthalten.

Es ist möglich, PCRE-Modifikatoren in der $pattern Zeichenfolge zu verwenden. Einige gebräuchliche sind i (ohne Berücksichtigung der Groß- und Kleinschreibung), m (mehrzeilig) und s (das Punkt-Metazeichen schließt Zeilenumbrüche ein). Der Modifizierer g (global) ist nicht zulässig, stattdessen wird die Funktion preg_match_all verwendet.

Übereinstimmungen mit PCRE-Zeichenfolgen werden mit $ vorangestellten nummerierten Zeichenfolgen ausgeführt:

<?php

$replaced = preg_replace('%hello ([a-z]+) world%', 'goodbye $1 world', 'hello awesome world');

echo $replaced; // 'goodbye awesome world'

String-Abgleich mit regulären Ausdrücken

preg_match prüft, ob eine Zeichenfolge mit dem regulären Ausdruck übereinstimmt.

$string = 'This is a string which contains numbers: 12345';

$isMatched = preg_match('%^[a-zA-Z]+: [0-9]+$%', $string);
var_dump($isMatched); // bool(true)

Wenn Sie einen dritten Parameter übergeben, wird er mit den übereinstimmenden Daten des regulären Ausdrucks gefüllt:

preg_match('%^([a-zA-Z]+): ([0-9]+)$%', 'This is a string which contains numbers: 12345', $matches);
// $matches now contains results of the regular expression matches in an array.
echo json_encode($matches); // ["numbers: 12345", "numbers", "12345"]

$matches enthält ein Array der gesamten Übereinstimmung und dann Teilstrings im regulären Ausdruck, die durch Klammern in der Reihenfolge der Versetzung der offenen Klammer begrenzt sind. Das heißt, wenn Sie /z(a(b))/ als regulären Ausdruck haben, enthält Index 0 die gesamte zab , Index 1 enthält die zab , die durch die äußeren Klammern ab und Index 2 enthält die inneren Klammern b .

Zeichenfolge durch einen regulären Ausdruck in ein Array aufteilen

$string = "0| PHP 1| CSS 2| HTML 3| AJAX 4| JSON";

//[0-9]: Any single character in the range 0 to 9
// +   : One or more of 0 to 9
$array = preg_split("/[0-9]+\|/", $string, -1, PREG_SPLIT_NO_EMPTY);
//Or
// []  : Character class
// \d  : Any digit
//  +  : One or more of Any digit
$array = preg_split("/[\d]+\|/", $string, -1, PREG_SPLIT_NO_EMPTY);

Ausgabe:

Array
(
    [0] =>  PHP
    [1] =>  CSS 
    [2] =>  HTML 
    [3] =>  AJAX 
    [4] =>  JSON
)

Um einen String in ein Array aufzuteilen, preg_split(); einfach den String und einen Regex für preg_split(); Wenn Sie einen dritten Parameter ( limit ) hinzufügen und suchen möchten, können Sie die Anzahl der durchzuführenden Übereinstimmungen festlegen. Der verbleibende String wird am Ende des Arrays hinzugefügt.

Der vierte Parameter ist ( flags ) hier verwenden wir die PREG_SPLIT_NO_EMPTY , die von enthält alle leeren Schlüssel / Werte unser Angebot verhindert.

Zeichenfolge, die durch regulären Ausdruck ersetzt wird

$string = "a;b;c\nd;e;f";
// $1, $2 and $3 represent the first, second and third capturing groups
echo preg_replace("(^([^;]+);([^;]+);([^;]+)$)m", "$3;$2;$1", $string);

Ausgänge

c;b;a
f;e;d

Sucht alles zwischen Semikolons und kehrt die Reihenfolge um.

Globales RegExp-Match

Eine globale RegExp-Übereinstimmung kann mit preg_match_all durchgeführt werden. preg_match_all gibt alle übereinstimmenden Ergebnisse in der Betreffzeichenfolge zurück (im Gegensatz zu preg_match , das nur das erste Ergebnis zurückgibt).

Die Funktion preg_match_all gibt die Anzahl der Übereinstimmungen zurück. Der dritte Parameter $matches enthält Übereinstimmungen im Format, das durch Flags gesteuert wird, die im vierten Parameter angegeben werden können.

Wenn ein Array angegeben wird, enthält $matches ein Array mit einem ähnlichen Format, das Sie mit preg_match würden, mit der preg_match , dass preg_match bei der ersten Übereinstimmung stoppt. preg_match preg_match_all den String so lange, bis der String vollständig verbraucht ist und das Ergebnis jeder Iteration in einem mehrdimensionalen Array zurückgibt , welches Format durch das Flag im vierten Argument gesteuert werden kann.

Das vierte Argument, $flags , steuert die Struktur des Arrays $matches . Der Standardmodus ist PREG_PATTERN_ORDER und mögliche Flags sind PREG_SET_ORDER und PREG_PATTERN_ORDER .

Der folgende Code demonstriert die Verwendung von preg_match_all :

$subject = "a1b c2d3e f4g";
$pattern = '/[a-z]([0-9])[a-z]/';

var_dump(preg_match_all($pattern, $subject, $matches, PREG_SET_ORDER)); // int(3)
var_dump($matches);
preg_match_all($pattern, $subject, $matches); // the flag is PREG_PATTERN_ORDER by default
var_dump($matches);
// And for reference, same regexp run through preg_match()
preg_match($pattern, $subject, $matches);
var_dump($matches);

Der erste var_dump von PREG_SET_ORDER liefert diese Ausgabe:

array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(3) "a1b"
    [1]=>
    string(1) "1"
  }
  [1]=>
  array(2) {
    [0]=>
    string(3) "c2d"
    [1]=>
    string(1) "2"
  }
  [2]=>
  array(2) {
    [0]=>
    string(3) "f4g"
    [1]=>
    string(1) "4"
  }
}

$matches hat drei verschachtelte Arrays. Jedes Array stellt eine Übereinstimmung dar, die dasselbe Format wie das Ergebnis von preg_match .

Der zweite var_dump ( PREG_PATTERN_ORDER ) liefert diese Ausgabe:

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(3) "a1b"
    [1]=>
    string(3) "c2d"
    [2]=>
    string(3) "f4g"
  }
  [1]=>
  array(3) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "4"
  }
}

Wenn derselbe reguläre Ausdruck durch preg_match , wird das folgende Array zurückgegeben:

array(2) {
  [0] =>
  string(3) "a1b"
  [1] =>
  string(1) "1"
}

String durch Callback ersetzen

preg_replace_callback sendet jede übereinstimmende Erfassungsgruppe an den definierten Callback und ersetzt sie durch den Rückgabewert des Callbacks. Dies ermöglicht uns, Zeichenfolgen basierend auf jeder Art von Logik zu ersetzen.

$subject = "He said 123abc, I said 456efg, then she said 789hij";
$regex = "/\b(\d+)\w+/";

// This function replaces the matched entries conditionally 
// depending upon the first character of the capturing group
function regex_replace($matches){
    switch($matches[1][0]){
        case '7':
            $replacement = "<b>{$matches[0]}</b>";
            break;
        default:
            $replacement = "<i>{$matches[0]}</i>";
    }
    return $replacement;
}

$replaced_str = preg_replace_callback($regex, "regex_replace", $subject);

print_r($replaced_str);
# He said <i>123abc</i>, I said <i>456efg</i>, then she said <b>789hij</b> 


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow