Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP preg_replace正则表达式查找和替换文本?_Php_Regex - Fatal编程技术网

如何使用PHP preg_replace正则表达式查找和替换文本?

如何使用PHP preg_replace正则表达式查找和替换文本?,php,regex,Php,Regex,我编写此PHP代码是为了进行一些替换: function cambio($txt){ $from=array( '/\+\>([^\+\>]+)\<\+/', //finds +>text<+ '/\%([^\%]+)\%/', //finds %text% ); $to=array( '<span class="P">\1</span>', '&l

我编写此PHP代码是为了进行一些替换:

function cambio($txt){
    $from=array(
        '/\+\>([^\+\>]+)\<\+/', //finds +>text<+
        '/\%([^\%]+)\%/',   //finds %text%
    );

    $to=array(
        '<span class="P">\1</span>',
        '<span>\1</span>',
    );

    return preg_replace($from,$to,$txt);
}

echo cambio('The fruit I most like is: +> %apple% %banna% %orange% <+.');
函数cambio($txt){
$from=数组(
'/\+\>([^\+\>]+)\%apple%%banna%%orange%texttext试试这个:

function cambio($txt){
    $from=array(
        '/\+\>([^\+\>]+)\<\+/', //finds +>text<+
        '/\%(^\%)([^\%]+)\%/',   //finds %text%
    );

    $to=array(
        '<span class="P">\1</span>',
        '<span class="\1">\1\2</span>',
    );

    return preg_replace($from,$to,$txt); }

echo cambio('The fruit I most like is:
+> %apple% %banna% %orange% <+.');
函数cambio($txt){
$from=数组(

“/\+\>([^\+\>]+)\%apple%%banna%%orange%
内部跨度的类别(即class=“b”)总是等于水果的第一个字母?你是在用PHP编写自己的模板语言吗?小心。Ass3mbler,对不起,我不想与内容的第一个字母建立关系。我将类名编辑为:t1、t2和t3。Nathan,我不敢走这么远:-)@罗杰:不需要编辑你的问题标题就可以说问题已经解决了。被接受的答案会告诉你(在大多数情况下);)Obrigado/Gracias,Xavier!再深入一点,有可能得到这个吗?:我最喜欢的水果是:apple banna coco。你需要使用
preg_replace_callback()
function。但此函数是无状态的,因此您需要作弊。请参见示例,但请注意,它仅适用于PHP5.3 Perfect!不可触摸。谢谢。您的代码回应:我最喜欢的结果是:%apple%%banna%%orange%…注意,我更改了一些我最初希望的内容。我正在想象如何使用strin命名内部span类g与内容无关。。。
The fruit I most like is: <span class="P"> <span class="t1">apple</span> <span class="t2">banana</span> <span class="t3">coco</span> </span>.
function matches($matches){
    static $pos=0;
    return sprintf('<span class="t%d">%s</span>',++$pos,$matches[1]);
}

function cambio($txt){//Markdown da Atípico : Deve ser usado depois do texto convertido para markdown
    $from=array(
        '/\=>(.+?)<\=/', //finds: =>text<=
        '/\+>(.+?)<\+/', //finds +>text<+
    );

    $to=array(
        '<span class="T">\1</span>',
        '<span class="P">\1</span>',
    );

    $r=preg_replace($from,$to,$txt);
    return preg_replace_callback('/%(.*?)%/','matches',$r);//finds %text%
    //'/%((\w)\w+)%/'   //option
}
function cambio($txt){
    $from=array(
        '/\+\>([^\+\>]+)\<\+/', //finds +>text<+
        '/\%(^\%)([^\%]+)\%/',   //finds %text%
    );

    $to=array(
        '<span class="P">\1</span>',
        '<span class="\1">\1\2</span>',
    );

    return preg_replace($from,$to,$txt); }

echo cambio('The fruit I most like is:
+> %apple% %banna% %orange% <+.');
<?php


function cambio($txt){
    $from=array(
        '/\+>(.+?)<\+/', //finds +>text<+
        '/%((\w)\w+)%/',   //finds %text%
    );

    $to=array(
        '<span class="P">\1</span>',
        '<span class="\2">\1</span>',
    );

    return preg_replace($from,$to,$txt);
}

echo cambio('The fruit I most like is: +> %apple% %banna% %orange% <+.');
function cambio($txt) {
    return preg_replace_callback('/\+>(.+?)<\+/', function ($matches) {
        $txt = sprintf('<span class="P">%s</span>', $matches[1]);

        return preg_replace_callback('/%(\w+)%/', function ($matches) {
            static $pos = 0;
            return sprintf('<span class="t%d">%s</span>', ++$pos, $matches[1]);
        }, $txt);

    }, $txt);
}

echo  cambio('The fruit I most like is: +> %apple% %banna% %orange% <+.');