2014-02-17 4 views
0

У меня есть строка, которую я собираюсь заменить. Тем не менее, я бы хотел использовать только часть шаблона, который я сопоставляю.Доступ к группе захвата в preg_replace_callback

Пример:

$subject = "methodName(127)"; 

$callback = function($match) 
{ 
    echo $match[0]; 
    // will echo 'methodName(127)' 

    return; 
} 

preg_replace_callback('/[a-z]+\([0-9]+\)/', $callback, $subject, 1); 

В этом примере, мой метод обратного вызова получит доступ ко всей игре шаблона. Однако я хотел бы выделить только числа между круглыми скобками. Группа захвата, казалось бы, была бы полезной здесь, но я не знаю, есть ли способ получить к ней доступ в пределах $callback или, возможно, передать ее в качестве аргумента (например, use ($arg)).

Я понимаю, что я могу просто preg_match шаблон между круглыми скобками в $callback, но мне интересно, возможно ли это сделать с группами захвата.

ответ

2

Вы можете использовать группы захвата для доступа к номерам. Это похоже на то, что вы хотите -

$subject = "methodName(127)"; 
$callback = function($match) 
{ 
    var_dump($match); 
    /* 
     OUTPUT- 
     array 
      0 => string 'methodName(127)' (length=15) 
      1 => string '127' (length=3) 
    */ 
    echo $match[1]; 
    //OUTPUT - > 127 
    return; 
}; 
preg_replace_callback('/[a-zA-Z]+\(([0-9]+)\)/', $callback, $subject, 1); 
//        ^ ^Capturing groups 
Смежные вопросы