正则表达式和PHP

时间:2010-08-23 15:06:00

标签: php regex preg-replace

说我有这样的字符串:

$string = 'The /*quick*/ brown /*fox*/ jumped over the lazy /*dog*/.';

如何使用正则表达式查找/ * * /的出现次数并替换每个值,如下所示:

/*quick*/ with the value of $_POST['quick']
/*fox*/ with the value of $_POST['fox']
/*dog*/ with the value of $_POST['dog']

我已尝试使用此模式使用preg_replace:~/\*(.+)\*/~e

但它似乎对我不起作用。

2 个答案:

答案 0 :(得分:4)

模式(.+)太贪心了。它会找到最长的匹配,即quick*/ brown /*fox*/ jumped over the lazy /*dog,因此无效。

如果*/*之间不显示*/,请使用:

preg_replace('|/\*([^*]+)\*/|e', '$_POST["$1"]', $string)

否则,请使用延迟量词:

preg_replace('|/\*(.+?)\*/|e', '$_POST["$1"]', $string)

示例:http://www.ideone.com/hVUNA

答案 1 :(得分:0)

你可以概括一下(PHP 5.3+,动态函数):

$changes = array('quick' => $_POST['quick'],
                 'fox'   => $_POST['fox'],
                 'dog'   => $_POST['dog']   );

$string = 'The /*quick*/ brown /*fox*/ jumped over the lazy /*dog*/.';

echo preg_replace(
        array_map(function($v){return'{/\*\s*'.$v.'\s*\*/}';}, array_keys($changes)),
        array_values($changes),
        $string
     );

如果您希望对被替换的内容进行精细控制。否则,KennyTM already solved this

此致

RBO