s.oliver: Regex immer mal wieder

Beitrag lesen

Servus,

Hier trifft zu, was ich Dir beschrieben habe: der erste Ausdruck ist gefrässig und sucht so viele Zeichen wie möglich, der zweite, weil er ein " zwischen "" ausschliesst, sucht nur was absolut ausreicht, um die Bedingung zu erfüllen - [^"]+ und [^"]*? in Aktion. ;)

Teste das mal genau so:

<?php

// text, der durchsucht werden soll
// nur etwas anders dargestellt
// - zwischen '' sollten die " nicht maskiert werden
// - um der Lesbarkeit des Beispiels willen in Fragmenten
$subject =
    '"sonne.html"' . "\n" .
    '"sonne2.html"' . "\n" .
    '"sonne3.html"' . "\n" .
    '"katze/sonne4.html"' . "\n" .
    '"sonnehtml.jpg"' . "\n" .
    '"sonne2.csv"' . "\n" .
    '"sonne3.txt"' . "\n" .
    '"katze/sonne4.php"';

// der reguläre ausdruck
$pattern = '!".*?atz.*?"!is';
#$pattern = '!"[^"]+atz[^"]*?"!is';

// regexp auswerten
$result = preg_match_all( $pattern, $subject, $subpattern );

// ergebnis ausgeben
echo '<p>der verwendete reguläre ausdruck trifft auf den zu durchsuchenden text '.
   (($result) ? $result.' mal ' : 'nicht ').'zu.</p>';

// unterausdrücke ausgeben
echo '<pre>'.print_r($subpattern, true).'</pre>';

#  -------------------------------------------
#  Ergebnis für $pattern = '!".*?atz.*?"!is';
#  -------------------------------------------

#  der verwendete reguläre ausdruck trifft auf den zu durchsuchenden text 2 mal zu.

#  Array
#  (
#      [0] => Array
#          (
#              [0] => "sonne.html"
#  "sonne2.html"
#  "sonne3.html"
#  "katze/sonne4.html"
#              [1] => "sonnehtml.jpg"
#  "sonne2.csv"
#  "sonne3.txt"
#  "katze/sonne4.php"
#          )
#  )

#  -------------------------------------------
#  Ergebnis für $pattern = '!"[^"]+atz[^"]*?"!is';
#  -------------------------------------------

#  der verwendete reguläre ausdruck trifft auf den zu durchsuchenden text 2 mal zu.

#  Array
#  (
#      [0] => Array
#          (
#              [0] => "katze/sonne4.html"
#              [1] => "katze/sonne4.php"
#          )
#  )

?>

Grüsse