我在PHP中有一个简单的正则表达式,我用它来代替字符串。
$pat='/\$(\w+)/';
$repl='f("${1}")';
echo preg_replace($pat,$repl,'This is a $test.');
例如,这可以翻译:
This is a $test.
成:
This is a f("test")
但是现在我想稍微改变这一点,以便我可以匹配多个逗号分隔的单词并单独包装它们,如下所示:
This is a $test,red,green,blue.
应该成为:
This is a f("test","red","green","blue")
我可以轻松地提出这个模式:
$pat='/\$([\w,]+)/';
但我不知道如何单独包装重复组的每个元素。使用现有的替代品我得到:
This is a f("test,red,green,blue")
尝试类似:
$repl='f(${"1"})';
破坏了参考资料,显然无法正常工作。
答案 0 :(得分:2)
要执行此操作,您必须使用preg_replace_callback()
,然后使用回调函数稍微修改您的替换,您首先将逗号分隔的explode()
匹配为数组,然后implode()
回到一个字符串,您可以在其中放置引号,例如
的更换:
$repl = function($m){
return 'f("' . implode("\",\"", explode(",", $m[1])) . '")';
};
函数调用:
preg_replace($pat, $repl, $str); → preg_replace_callback($pat, $repl, $str);