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

5m1hhzi4  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(107)

我从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 if,表示else if no match,将$status设置为false。
我现在设置的$patterns数组是否可以运行preg_match?如果是这样,我怎么能这样做呢?我想在现有数组上运行preg_match,以减少为第二个数组编写更多代码,因为第二个数组只包含相同的单词。

bvn4nwqk

bvn4nwqk1#

选项1:

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

备选方案二:

$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,但恕我直言,这太复杂了

相关问题