【问题标题】:How to preg_match with the pattern being an array (php) [closed]如何preg_match与作为数组的模式(php)[关闭]
【发布时间】:2013-09-24 08:18:50
【问题描述】:

Php.net 有这个 preg_replace sn-p

$string = 'The quick brown fox jumped over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);

有没有办法在 $patterns 上运行 preg_match 来做这样的事情

如果在 $string 中找到 preg_match 则 preg_replace 否则回显未找到匹配项

谢谢。

【问题讨论】:

    标签: php arrays preg-replace preg-match


    【解决方案1】:

    您似乎只想拥有一个preg_replace,它还会提醒您未发生的匹配?

    以下内容对您有用:

    $string = 'The quick brown fox jumped over the lazy dog.';
    $patterns = array();
    $patterns[0] = '/quick/';
    $patterns[1] = '/brown/';
    $patterns[2] = '/pig/';
    $replacements = array();
    $replacements[2] = 'bear';
    $replacements[1] = 'black';
    $replacements[0] = 'slow';
    
    for($i=0;$i<count($patterns);$i++){
        if(preg_match($patterns[$i], $string))
            $string = preg_replace($patterns[$i], $replacements[$i], $string);
        else
            echo "FALSE: ", $patterns[$i], "\n";
    }
    echo "<br />", $string;
    
    /**
    
    Output:
    
    FALSE: /pig/
    The slow black fox jumped over the lazy dog.
    */
    

    $string = preg_replace($patterns, $replacements, $string, -1, $count);
    if(empty($count)){
        echo "No matches found";
    }
    

    【讨论】:

    • 它确实有效。我已经对其进行了测试并显示了输出。您正在使用的实际输入和模式/替换数组是什么?
    • 它在某种意义上是有效的。重点是用 $replacements 中的字符串替换 $patterns 中的字符串。您的代码按原样回显 $string 而不替换任何内容。例如原始代码输出,“熊黑慢跳过懒狗。”它替换 $patterns 数组中找到的任何字符串,并用 $replacements 中的相应单词替换它们。
    • 哈,啊,对不起,我的错......我忘了在$string =之前添加preg_replace
    • 是的,解决了它。但我认为你误解了我的操作。我不想知道没有找到哪些匹配项我只想知道是否找到了匹配项。如果找到匹配,则替换。如果找不到匹配项,请告诉我没有找到匹配项。我不需要知道未找到数组中的 pig 或任何其他特定单词。明白我的意思了吗?
    • 好的,首先,查看更新后的答案(以及上面的 my 评论)...其次,您只想知道preg_replace 是否替换了任何东西?跨度>
    【解决方案2】:

    这是你在找的吗?

        $string = 'The quick brown fox jumped over the lazy dog.';
    $patterns = array();
    $patterns[0] = '/quick/';
    $patterns[1] = '/brown/';
    $patterns[2] = '/fox/';
    $replacements = array();
    $replacements[2] = 'bear';
    $replacements[1] = 'black';
    $replacements[0] = 'slow';
    
    foreach ($patterns as $pattern) {
      if (preg_match("/\b$pattern\b/", $string)) {
        echo preg_replace($pattern, $replacements, $string);
          }
    }
    

    【讨论】:

    • 早些时候尝试过。不工作。很确定你可以从 preg_replace 中删除回声。有或没有它都不起作用。
    • 这仍然行不通。每个模式都需要像/quick/ 我想尽可能保持我的数组。也许我可以使用 implode 或 foreach?
    • 那行不通,因为preg_match 只接受string 并且您正在为其提供一个数组...
    • 这就是为什么我使用 foreach 进行编辑,忘记了 preg_match 不使用数组..
    • 这也行不通...您提供给preg_match 的模式不正确,不会被正则表达式引擎接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多