在这篇文章中,我将为您提供三种不同的方法来做您要求的事情。我实际上建议使用最后一个片段,因为它最容易理解,并且在代码中非常整洁。
如何查看数组中与我的正则表达式匹配的哪些元素?
有一个专门用于此目的的函数。它将采用正则表达式作为第一个参数,将数组作为第二个参数。preg_grep
请参阅以下示例:
$haystack = array (
'say hello',
'hello stackoverflow',
'hello world',
'foo bar bas'
);
$matches = preg_grep ('/^hello (\w+)/i', $haystack);
print_r ($matches);
输出
Array
(
[1] => hello stackoverflow
[2] => hello world
)
文档
但我只想获取指定组的值。如何?
array_reduce
用可以以干净的方式解决这个问题;请参阅下面的代码段。preg_match
$haystack = array (
'say hello',
'hello stackoverflow',
'hello world',
'foo bar bas'
);
function _matcher ($m, $str) {
if (preg_match ('/^hello (\w+)/i', $str, $matches))
$m[] = $matches[1];
return $m;
}
// N O T E :
// ------------------------------------------------------------------------------
// you could specify '_matcher' as an anonymous function directly to
// array_reduce though that kind of decreases readability and is therefore
// not recommended, but it is possible.
$matches = array_reduce ($haystack, '_matcher', array ());
print_r ($matches);
输出
Array
(
[0] => stackoverflow
[1] => world
)
文档
使用似乎很乏味,难道没有另一种方法吗?array_reduce
是的,这个实际上更干净,尽管它不涉及使用任何预先存在的或功能。array_*
preg_*
如果要多次使用此方法,请将其包装在函数中。
$matches = array ();
foreach ($haystack as $str)
if (preg_match ('/^hello (\w+)/i', $str, $m))
$matches[] = $m[1];
文档