2016-09-03 100 views
1

字符串的一部分,我有一个与字符串替换匹配特定模式

vessel_type='##some_key##' AND vessel_name= '##other_key##' 

我希望它被替换与 -

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

some_keyother_key可以是任何随机文本。我怎么做?像preg_replace()可以帮助吗?

谢谢。

+0

是的,像'preg_replace'可以提供帮助。 –

+0

您的代码是SQL注入脆弱:http://php.net/manual/en/security.database.sql-injection.php – Toto

回答

0

解决方案与preg_replace_callback

$_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!" 
+0

谢谢你,但是如果我不知道是什么的'pew'关键? – mukto90

+0

然后你知道什么? –

0

您可以使用##两边包围的捕获组:

$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"]}' 

RegEx Demo

+0

@ mukto90:这是否工作? – anubhava