说我有这样的字符串:
$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
但它似乎对我不起作用。
答案 0 :(得分:4)
模式(.+)
太贪心了。它会找到最长的匹配,即quick*/ brown /*fox*/ jumped over the lazy /*dog
,因此无效。
如果*
和/*
之间不显示*/
,请使用:
preg_replace('|/\*([^*]+)\*/|e', '$_POST["$1"]', $string)
否则,请使用延迟量词:
preg_replace('|/\*(.+?)\*/|e', '$_POST["$1"]', $string)
答案 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