我有一个文件的路径,想用正则表达式提取其中的部分。但是模式似乎是错误的,只给出了最后一个匹配。
$s = 'engine/plugins/renderer_smarty/plugins/css_minify/';
preg_match('@^engine/(plugins/(.+?)/)+$@i',$s,$matches);
结果:
array (3):
0 => string (50): "engine/plugins/renderer_smarty/plugins/css_minify/"
1 => string (19): "plugins/css_minify/"
2 => string (10): "css_minify"
期望结果:
array (5):
0 => string (50): "engine/plugins/renderer_smarty/plugins/css_minify/"
1 => string (24): "plugins/renderer_smarty/"
2 => string (15): "renderer_smarty"
3 => string (19): "plugins/css_minify/"
4 => string (10): "css_minify"
模式有什么问题?
谢谢!
preg_match_all('@(?<=/)plugins/([^/]+)@i',$s,$matches);
如何?**请参见此演示**。您面临的问题是由设计正则表达式重复捕获组行为引起的,只有最后一次迭代捕获的值存储在组内存缓冲区中。 - Wiktor Stribiżew