Php 替换与特定模式匹配的字符串的一部分

Php 替换与特定模式匹配的字符串的一部分,php,regex,preg-replace,Php,Regex,Preg Replace,我有一根绳子- vessel_type='##some_key##' AND vessel_name= '##other_key##' 我希望它被替换为- vessel_type='{$_POST['some_key']}' AND vessel_name='{$_POST['other_key']}' 此某些\u键和其他\u键可以是任意随机文本。我该怎么做?像preg\u replace()这样的东西会有帮助吗 谢谢。带有preg\u replace\u回调的解决方案: $_POST['p

我有一根绳子-

vessel_type='##some_key##' AND vessel_name= '##other_key##'
我希望它被替换为-

vessel_type='{$_POST['some_key']}' AND vessel_name='{$_POST['other_key']}'
某些\u键
其他\u键
可以是任意随机文本。我该怎么做?像
preg\u replace()
这样的东西会有帮助吗


谢谢。

带有
preg\u replace\u回调的解决方案

$_POST['pew'] = 'LOL!';
$str = 'i said ##pew##';
var_dump(preg_replace_callback('/##(\w+)##/', function($v) { return $_POST[$v[1]]; }, $str));
// string(11) "i said LOL!" 

带有
preg\u replace\u回调的解决方案

$_POST['pew'] = 'LOL!';
$str = 'i said ##pew##';
var_dump(preg_replace_callback('/##(\w+)##/', function($v) { return $_POST[$v[1]]; }, $str));
// string(11) "i said LOL!" 

您可以在任意一侧使用由
##
包围的捕获组:

$re = '/##([^#]+)##/'; 
$str = "vessel_type='##some_key##' AND vessel_name= '##other_key##'"; 
$subst = '{$_POST["$1"]}'; 

$result = preg_replace($re, $subst, $str);

//=> vessel_type='{$_POST["some_key"]}' AND vessel_name= '{$_POST["other_key"]}' 

您可以使用一个由
##
包围的捕获组:

$re = '/##([^#]+)##/'; 
$str = "vessel_type='##some_key##' AND vessel_name= '##other_key##'"; 
$subst = '{$_POST["$1"]}'; 

$result = preg_replace($re, $subst, $str);

//=> vessel_type='{$_POST["some_key"]}' AND vessel_name= '{$_POST["other_key"]}' 

是的,像
preg\u replace
这样的东西可以帮助你。你的代码易受SQL注入攻击:是的,像
preg\u replace
这样的东西可以帮助你。你的代码易受SQL注入攻击:谢谢,但是如果我不知道
pew
键怎么办?那么你知道什么?谢谢,但是如果我不知道
pew
键怎么办?那你知道什么?