2010-03-16 22 views
6

vamos a decir que tengo dos de expresiones regulares,PHP: ¿Cómo obtengo los índices de cadena de un preg_match_all?

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

y texto

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

Lo que quiero es conseguir los siguientes índices con preg_match:

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

¿Hay alguna manera de obtener estos índices usan preg_match_all sin recorrer el texto cada vez?

EDIT: SOLUCIÓN PREG_OFFSET_CAPTURE!

Respuesta

17

Usted puede intentar PREG_OFFSET_CAPTURE bandera para 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); 

salida

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

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

) 
+1

Funciona con preg_match_all(), así: D – bbeckford

Cuestiones relacionadas