2010-03-16 12 views
6

disons que j'ai deux années regexp,PHP: Comment obtenir les index de chaîne d'un preg_match_all?

/eat (apple|pear)/ 
/I like/ 

et texte

"I like to eat apples on a rainy day, but on sunny days, I like to eat pears." 

Ce que je veux est d'obtenir les indices suivants avec preg_match:

match: 0,5 (I like) 
match: 10,19 (eat apples) 
match: 57,62 (I like) 
match: 67,75 (eat pears) 

Est-il possible d'obtenir ces index utilisant preg_match_all sans boucler le texte à chaque fois?

EDIT: SOLUTION PREG_OFFSET_CAPTURE!

Répondre

17

Vous pouvez PREG_OFFSET_CAPTURE drapeau pour preg_match():

$subject="I like to eat apples on a rainy day, but on sunny days, I like to eat pears."; 
$pattern = '/eat (apple|pear)/'; 
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); 
print_r($matches); 

Sortie

$ php test.php 
Array 
(
    [0] => Array 
     (
      [0] => eat apple 
      [1] => 10 
     ) 

    [1] => Array 
     (
      [0] => apple 
      [1] => 14 
     ) 

) 
+1

Fonctionne avec preg_match_all() ainsi: D – bbeckford