如何进行多次预匹配


How to make multiple preg_match

如何在string上生成多个preg_match。我做了一项研究,得出了以下解决方案。

<?php
$input = '@Hello@ & Good Day ~World~';
$regex = '/
    ~   
    (.*?)   
    ~
    /six';
$input_new = preg_replace($regex,'<i>$1</i>', $input);
echo $input_new;

以上将搜索CCD_ 3并更改为italic格式。如何在同一文本上搜索(@)string(@)并更改为bold格式。

preg_replace,正如手册所说,也可以采用多种模式和替换:

<?php
$input = '@Hello@ & Good Day ~World~';
$regexes = array('/~(.*?)~/six',
                 '/@(.*?)@/six'
                );
$replaces = array('<i>$1</i>',
                  '<b>$1</b>'
                 );
$input_new = preg_replace($regexes, $replaces, $input);
echo $input_new;

你做了和上面一样的事情,只是这次像这样将更改为改为。否则,只需创建一个函数来这样做:

    <?php
        function transposeBoldItalic($inputString, $embolden="Hello",$italicise="World"){
            $result = preg_replace("#(" . preg_quote($embolden)  . ")#", "<strong>$1</strong>", $inputString);
            $result = preg_replace("#(" . preg_quote($italicise) . ")#", "<em>$1</em>", $result);
            return $result;
        }
        // TEST IT:
        $inputString = "Hello & Good Day World";
        var_dump(transposeBoldItalic($inputString, "Hello", "World"));
        echo(transposeBoldItalic($inputString, "Hello", "World"));
        // DUMPS 
        <strong>Hello</strong> & Good Day <em>World</em> 

在此处测试:https://eval.in/571784

@osnapitzkindle的答案是正确的,但您也可以使用preg_replace_callback

echo preg_replace_callback('/([@~])(.*?)([@~])/', function ($matches){
    return (strpos($matches[1], '@') !== false) ? "<i>{$matches[2]}</i>" : "<b>{$matches[2]}</b>";}, $input
    );

Ideone演示