RegExp - Gierig oder nicht ?
Oft werde ich gefragt, was mit »Gier« bei regulären Ausdrücken eigentlich gemeint ist.
Die »Gier« bei regulären Ausdrücken wird somit begründet:
Reguläre Ausdrücke suchen immer die größtmöglichste Anzahl von Zeichen (gierig), die kann mit dem Modifer U unterdrückt werden.
Anhand von keinen Beispielen möchte ich darauf mal eingehen.
Nehmen wir an, wir suchen alle Buchstaben in einer Zeichenkette mit preg_match_all().
<?php
$string = 'the quick brown fox jumps over the lazy dog';
?> <?php
// unser Ausdruck
$ausdruck = '([a-z])+';
$regexp = '#'.$ausdruck.'#i';
?> delimiter pattern (was wird gesucht) delimiter modifer
# ([a-z])+ # i[0] => Array
(
[0] => the
[1] => quick
[2] => brown
...
[6] => the
[7] => lazy
[8] => dog
) <?php
// unser Ausdruck
$ausdruck = '([a-z])+';
$regexp = '#'.$ausdruck.'#iU';
?> [0] => Array
(
[0] => t
[1] => h
[2] => e
...
[32] => d
[33] => o
[34] => g
)The Quick 15 Brown Fox Jumped Over The Quick Dogs.
The Quick Brown Fox Jumped Over The Lazy 30 Dogs. <?php
preg_match('#Quick(\C*)Quick#', $string, $array);
?> Array
(
[0] => Quick 15 Brown Fox Jumped Over The Quick Dogs.
The Quick
[1] => 15 Brown Fox Jumped Over The Quick Dogs.
The
) <?php
preg_match('#Quick(\C*?)Quick#', $string, $array);
?> Array
(
[0] => Quick 15 Brown Fox Jumped Over The Quick
[1] => 15 Brown Fox Jumped Over The
)