PHP 使用数组实现preg_match,然后preg_replace匹配项


PHP implement preg_match with an array then preg_replace the matches

Namaste,大家。所以我从 php.net 中抓取了这个非常有用的片段并对其进行了修改。

$cat = strip_tags(trim($_POST["cat"]));
$joke = strip_tags(trim($_POST["joke"]));
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[0] = 'bear';
$replacements[1] = 'black';
$replacements[2] = 'slow';
echo preg_replace($patterns, $replacements, $joke);

此代码完美运行。只要 $patterns 数组中的任何单词存在,它们就会被替换为相应的$replacement。

我想先对$patterns运行preg_match,如果有匹配项,请将一个名为 $status 的变量设置为 true 并运行preg_replace。但是,如果没有preg_match我想有一个 else 如果没有匹配设置为 false,我会说 else $status。

甚至可以在我的$patterns阵列上运行preg_match,就像我现在设置的那样吗?如果是这样,我该怎么做?我想在现有数组上运行preg_match,以减少为仅包含相同单词的第二个数组编写更多代码。

谢谢

选项 1:

$joke2 = preg_replace($patterns, $replacements, $joke);
$status = ($joke == $joke2) ? 'green' : 'red';

选项 2:

$matches = array_filter($patterns, function($a) use($joke) { return preg_match($a, $joke); });
if (!empty($matches)) {
    $status = 'red';
    $joke2 = preg_replace($patterns, $replacements, $joke);
} else {
    $status = 'green';
}

您问的是选项 2,但恕我直言,这太复杂了