我正在尝试从字符串返回匹配项,如下所示:
$subject = "The quick brown fox jumps over the lazy dog";
$pattern = "/(Dog|Brown|Fox)/i";
$pregMatchCount = preg_match_all($pattern, $subject, $matches);
print_r($matches);
但是,由于不区分大小写的修饰符,这会返回一个类似于以下内容的数组:
Array
(
[0] => dog
[1] => brown
[2] => fox
)
不区分大小写的修饰符很重要,因为模式将动态生成。还有其他方法可以解决此问题,但是如果有一种方法可以捕获此实例中的模式匹配,则会更好(并且更有效),如下所示:
Array
(
[0] => Dog
[1] => Brown
[2] => Fox
)
提前致谢。
最佳答案
我强烈建议不要使用正则表达式来完成此任务,因为不需要它。只需使用 stripos()
确定某个项目是否在字符串中。
function findMatches($subject, $items)
{
$matches = array();
foreach ( $items as $item )
{
if ( stripos($subject, $item) !== false )
{
$matches[] = $item;
}
}
return $matches;
}
$subject = "The quick brown fox jumps over the lazy dog";
print_r(findMatches($subject, array('Dog', 'Brown', 'Fx')));
参见this fiddle获取演示/性能统计数据。
你也可以做一个简单的array_filter:
$subject = "The quick brown fox jumps over the lazy dog";
print_r(array_filter(array('Dog', 'Brown', 'Fx'), function($item) use ($subject) {
return stripos($subject, $item) !== false;
}));
关于php - preg_match_all 返回模式匹配而不是主题匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38878559/