2010-03-16 2 views
6

скажем, у меня есть два типа RegExp,PHP: Как получить строковые индексы preg_match_all?

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

и TEXT

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

То, что я хочу, чтобы получить следующие показатели с preg_match:

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

Есть ли способ, чтобы получить эти индексы с использованием preg_match_all без циклирования через текст каждый раз?

EDIT: РЕШЕНИЕ PREG_OFFSET_CAPTURE!

ответ

17

Вы можете попробовать PREG_OFFSET_CAPTURE флаг 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); 

Выход

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

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

) 
+1

Работает с preg_match_all(), а также: D – bbeckford

Смежные вопросы