Using $ variables in preg_replace in PHP

前端 未结 2 828
情歌与酒
情歌与酒 2021-02-07 19:36

Ummm... how do I use variables in a call to preg_replace?

This didn\'t work:

foreach($numarray as $num => $text)
    {
        $patterns[] = \'/

        
相关标签:
2条回答
  • 2021-02-07 20:01

    Your replacement pattern looks ok, but as you've used single quotes in the matching pattern, your $num variable won't be inserted into it. Instead, try

    $patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
    $replacements[] = '<ces>$1<'.$text.'/>$2</ces>';
    

    Also note that when building up a pattern from "unknown" inputs like this, it's usually a good idea to use preg_quote. e.g.

    $patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/';
    

    Though I guess given the variable name it's always numeric in your case.

    0 讨论(0)
  • 2021-02-07 20:01

    Variables will only be expanded in strings declared with double quotes. So either use double quotes:

    $patterns[]     = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/";
    $replacements[] = "<ces>$1<$text/>$2</ces>";
    

    Or use string concatenation:

    $patterns[]     = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
    $replacements[] = '<ces>$1<'.$text.'/>$2</ces>';
    

    You should also take a look at preg_quote if your variables may contain regular expression meta characters.

    0 讨论(0)
提交回复
热议问题