Zoeken…


Syntaxis

  • 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)

parameters

Parameter Details
$pattern een string met een reguliere expressie (PCRE-patroon)

Opmerkingen

PHP reguliere expressies volgen PCRE-patroonstandaarden, die zijn afgeleid van Perl reguliere expressies.

Alle PCRE-reeksen in PHP moeten worden ingesloten met scheidingstekens. Een scheidingsteken kan elk niet-alfanumeriek, niet-backslash, niet-witruimte-teken zijn. Populaire scheidingstekens zijn bijvoorbeeld ~ , / , % .

PCRE-patronen kunnen groepen, tekenklassen, tekengroepen, vooruitkijkende / achterliggende beweringen en ontsnapte tekens bevatten.

Het is mogelijk om PCRE-modificaties te gebruiken in de tekenreeks $pattern . Enkele veel voorkomende zijn i (niet hoofdlettergevoelig), m (multiline) en s (de puntmetacharacter bevat nieuwe regels). De g (algemene) modificator is niet toegestaan, u gebruikt in plaats preg_match_all functie preg_match_all .

Overeenkomsten met PCRE-tekenreeksen worden gedaan met genummerde tekenreeksen met $ prefix:

<?php

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

echo $replaced; // 'goodbye awesome world'

Stringaanpassing met reguliere expressies

preg_match controleert of een string overeenkomt met de reguliere expressie.

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

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

Als u een derde parameter doorgeeft, wordt deze gevuld met de overeenkomende gegevens van de reguliere expressie:

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 bevat een array van de hele match en vervolgens subtekenreeksen in de reguliere expressie begrensd door haakjes, in de volgorde van de offset van de haakjes. Dat betekent dat als u /z(a(b))/ als de reguliere expressie heeft, index 0 de hele substring zab bevat, index 1 de substring begrensd door de buitenste haakjes ab en index 2 de binnenste haakjes b .

Splitsteken in array door een reguliere expressie

$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);

Output:

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

Om een string in een array te splitsen, geeft u de string en een regexp voor preg_split(); om te matchen en te zoeken, kunt u door het toevoegen van een derde parameter ( limit ) het aantal uit te voeren "matches" instellen, de resterende string wordt aan het einde van de array toegevoegd.

De vierde parameter is ( flags ) hier gebruiken we de PREG_SPLIT_NO_EMPTY die voorkomt dat onze array lege sleutels / waarden bevat.

String vervangen door reguliere expressie

$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);

uitgangen

c;b;a
f;e;d

Zoekt naar alles tussen puntkomma's en keert de volgorde om.

Wereldwijde RegExp-match

Een globale RegExp-match kan worden uitgevoerd met preg_match_all . preg_match_all retourneert alle overeenkomende resultaten in de onderwerpreeks (in tegenstelling tot preg_match , die alleen de eerste retourneert).

De functie preg_match_all retourneert het aantal overeenkomsten. Derde parameter $matches zullen matches in een formaat bevatten dat wordt bestuurd door vlaggen die kunnen worden gegeven in de vierde parameter.

Als een array wordt gegeven, bevatten $matches een array in een vergelijkbaar formaat dat u krijgt met preg_match , behalve dat preg_match stopt bij de eerste match, waarbij preg_match_all over de string herhaalt totdat de string volledig is verbruikt en het resultaat van elke iteratie in een multidimensionale array retourneert , welk formaat kan worden bestuurd door de vlag in het vierde argument.

Het vierde argument, $flags , regelt de structuur van $matches array. Standaardmodus is PREG_PATTERN_ORDER en mogelijke vlaggen zijn PREG_SET_ORDER en PREG_PATTERN_ORDER .

De volgende code toont het gebruik van 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);

De eerste var_dump van PREG_SET_ORDER geeft deze uitvoer:

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 heeft drie geneste arrays. Elke array vertegenwoordigt één overeenkomst, die hetzelfde formaat heeft als het retourresultaat van preg_match .

De tweede var_dump ( PREG_PATTERN_ORDER ) geeft deze uitvoer:

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"
  }
}

Wanneer dezelfde regexp wordt uitgevoerd door preg_match , wordt de volgende array geretourneerd:

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

String vervangen door callback

preg_replace_callback werkt door elke gekoppelde preg_replace_callback naar de gedefinieerde callback te sturen en vervangt deze door de retourwaarde van de callback. Dit stelt ons in staat om strings te vervangen op basis van elke vorm van logica.

$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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow