【问题标题】:PHP implement preg_match with an array then preg_replace the matchesPHP 用数组实现 preg_match 然后 preg_replace 匹配
【发布时间】:2013-09-24 05:46:06
【问题描述】:

Namaste,大家。于是我从 php.net 上抓取了这个非常有用的 sn-p 并对其进行了修改。

$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 以减少为仅包含相同单词的第二个数组编写更多代码。

谢谢

【问题讨论】:

    标签: php arrays preg-replace preg-match


    【解决方案1】:

    选项 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,但恕我直言,它太复杂了

    【讨论】:

    • 那你会怎么做呢?我需要检查单词,如果它们存在替换它们并设置一个变量让我知道单词被替换。如果没有匹配项,则不需要更换任何东西,我也需要知道这一点。
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多