我正在尝试捕获apache conf文件中的所有位置路径,以生成自动nginx模板。
我正在阅读的文件有这样的内容
<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);
问题是这只能获得$ match ['location']内的第一个位置“/ images / mobile”
无论如何都要匹配所有位置,不分割字符串或使用带偏移量的preg_match
谢谢
答案 0 :(得分:1)
您正在寻找preg_match_all()
。这是PHP对普通正则表达式的/g
修饰符的回答。传递的第3个参数($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
// )
// )