2012-04-02 14 views
1

I alle Vorkommens mit preg_match_all Offset finden versuchenpreg_match_all alle Vorkommen einer Zeichenfolge zu erhalten

z.B.

$haystack = 'aaaab'; 
$needle = 'aa'; 

preg_match_all('/' . $needle . '/', $haystack, $matches); 

$ treffer ist

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => aa 
        [1] => 0 
       ) 

      [1] => Array 
       (
        [0] => aa 
        [1] => 2 
       ) 

     ) 

) 

Die Rückgabe Offset der ersten und zweiten Gruppe von aa ("aa" "aa" "b") aus dem Heuhaufen, während ich es erwarte "zurückzukehren aa "beginnend mit Index 1 auch.

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => aa 
        [1] => 0 
       ) 

      [1] => Array 
       (
        [0] => aa 
        [1] => 1 
       ) 

      [2] => Array 
       (
        [0] => aa 
        [1] => 2 
       ) 

     ) 

) 

Gibt es eine Weise, die ich die Regex beheben kann oder eine andere Funktion verwenden (die akzeptiert reguläre Ausdrücke) dies zu tun bekommen?

PS: Ich weiß strpos, die dies tun können, aber ich habe ein paar mehr Dinge zu suchen, daher wird mit preg_match_all gehen.

Antwort

4

Sie müssen Ihren Nadelausdruck ändern, um eine Assertion zu verwenden. Dadurch wird verhindert, dass das 2. a von der Engine für reguläre Ausdrücke aufgefressen wird:

$needle = 'a(?=a)'; 
+0

Es funktioniert. Danke Tim! – i5z

Verwandte Themen