php - preg_match_all 返回模式匹配而不是主题匹配

标签 php regex

我正在尝试从字符串返回匹配项,如下所示:

$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/

相关文章:

php - 使用 XSL 和 Php 将 XML 数据转换为 HTML : only printing xml tags without any formatting

php - Magento - 根据自定义标准实现订单限制

c# - 如何在字符串中查找所有匹配项

java - 如何使用正则表达式来检查 Java 中的字符串是否至少以一位数字结尾?

php - 从我的 Drupal 获取所有分类法

php - 将 HTML 的 deleteRow() 与 PHP 生成的表相关联

python - 如何删除python中的非字母数字字符但保留一些特殊字符

java - 正则表达式中数字的重叠测试?

java - 使用初始化的字符串初始化匹配器,得到 NullPointerException

php - 从 php 运行 C 程序