2014-01-23 3 views
0

Я пытаюсь захватить все пути местоположения в файле conf apache, чтобы создавать автоматические шаблоны nginx.php preg_match на последовательных тегах

Файл, который я читаю есть что-то вроде этого

<Location /images/mobile> 
    SetHandler modperl 
    PerlOutputFilterHandler Apache2::AMFImageRendering 
</Location> 
<Location /images/otherroute> 
    SetHandler modperl 
    PerlOutputFilterHandler Apache2::AMFImageRendering 
</Location> 

я почти получил регулярное выражение работает с «адресом» матч группы, у меня был следующий

$file_str = file_get_contents($conf); 
preg_match("/<Location\s+(?P<location>.*?)\s*>.*?Apache2::AMFImageRendering.*?<\/Location>/s", $file_str, $matches); 
print_r($matches); 

Проблема заключается в том это только получить первое место «/ images/mobile» внутри $ matches ['location']

В любом случае, чтобы соответствовать всем местоположениям, не разделяя строку или используя preg_match с FSet

Спасибо

+3

[ 'preg_match_all()'] (http://php.net/manual/en/function.preg-match-all.php) устанавливает параметр 3 на массив глобальных матчей. – Sam

+0

@SamSullivan thanks !, который работает отлично, можете ли вы опубликовать это как ответ, чтобы я мог его принять – rkheik

ответ

1

Вы ищете preg_match_all(). Это ответ PHP на модификатор нормальных регулярных выражений /g. Третий переданный параметр ($matches) теперь будет содержать массив глобальных наборов соответствия.

$file_str = file_get_contents($conf); 
preg_match_all("/<Location\s+(?P<location>.*?)\s*>.*?Apache2::AMFImageRendering.*?<\/Location>/s", $file_str, $matches); 

print_r($matches); 
// Array (
// [0] => Array 
//  (
//  [0] => SetHandler modperl PerlOutputFilterHandler Apache2::AMFImageRendering 
//  [1] => SetHandler modperl PerlOutputFilterHandler Apache2::AMFImageRendering 
// ) 
// [location] => Array 
//  (
//  [0] => /images/mobile 
//  [1] => /images/otherroute 
// ) 
// [1] => Array 
//  (
//  [0] => /images/mobile 
//  [1] => /images/otherroute 
// ) 
// )