如何制作多个preg_match

时间:2016-05-15 14:43:23

标签: php

如何在preg_match上制作多个string。我做了一项研究,并能够提出以下解决方案。

<?php
$input = '@Hello@ & Good Day ~World~';
$regex = '/
    ~   
    (.*?)   
    ~
    /six';

$input_new = preg_replace($regex,'<i>$1</i>', $input);
echo $input_new;

以上内容将搜索(~)string(~)并更改为斜体格式。如何在同一文本中搜索(@)string(@)并更改为 粗体 格式。

3 个答案:

答案 0 :(得分:2)

正如手册所说,

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;

答案 1 :(得分:1)

你做同样的事情,只有这个时间改变 就像这样。否则,只需创建一个函数来执行此操作:

    <?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

答案 2 :(得分:1)

@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 Demo