PHP preg_replace 变量中的字符串
PHP preg_replace string within variables
我正在使用PHP7.2.4,我想做一个模板引擎项目,
我尝试使用 preg_replace 来更改字符串中的变量,
代码在这里:
<?php
$lang = array(
'hello' => 'Hello {$username}',
'error_info' => 'Error Information : {$message}',
'admin_denied' => '{$current_user} are not Administrator',
);
$username = 'Guest';
$current_user = 'Empty';
$message = 'You are not member !';
$new_string = preg_replace_callback('/\{($[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/', 'test', $string);
function test($matches)
{
return '<?php echo '.$matches[1].'; ?>';
}
echo $new_string;
但它只是告诉我
Hello , how are you?
它会自动删除变量...
更新:
这是 var_dump:
D:\Wamp\www\t.php:5:string 'Hello <?php echo $username; ?>, how are you?' (length=44)
你想要这样的东西吗?
<?php
$string = 'Hello {$username}, how are you?';
$username = 'AAAAAA';
$new_string = preg_replace('/\{($[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/', $username, $string);
echo $new_string;
结果是:
Hello AAAAAA, how are you?
更简单的方法是只写
<?php
$username = 'AAAAAA';
$string = 'Hello '.$username.', how are you?';
我喜欢保持简单,所以我会使用 str_replace,因为它还会更改所有可能会在您前进时派上用场的实例。
$string = 'Hello {$username}, how are you?';
$username = 'AAAAAA';
echo str_replace('{$username}',$username,$string);
您可以使用键(您的变量)和值(它们的值)创建一个关联数组,然后在 $
之后捕获变量部分并使用它来检查 preg_replace_callback
回调如果有一个名为找到的捕获的键,则函数。如果是,则替换为相应的值,否则,替换为匹配项以将其放回找到的位置。
这是一个 example code in PHP:
$values = array('username'=>'AAAAAA', 'lastname'=>'Smith');
$string = 'Hello {$username}, how are you?';
$new_string = preg_replace_callback('/\{$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)}/', function($m) use ($values) {
return 'Hello <?php echo ' . (!empty($values[$m[1]]) ? $values[$m[1]] : $m[0]) . '; ?>';
}, $string);
var_dump($new_string);
输出:
string(47) "Hello Hello <?php echo AAAAAA; ?>, how are you?"
注意模式变化,我在 $
:
之后移动了括号
\{$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)}
^ ^
实际上,您甚至可以将其缩短为
\{$([a-zA-Z_\x7f-\xff][\w\x7f-\xff]*)}
^^
我正在使用PHP7.2.4,我想做一个模板引擎项目, 我尝试使用 preg_replace 来更改字符串中的变量, 代码在这里:
<?php
$lang = array(
'hello' => 'Hello {$username}',
'error_info' => 'Error Information : {$message}',
'admin_denied' => '{$current_user} are not Administrator',
);
$username = 'Guest';
$current_user = 'Empty';
$message = 'You are not member !';
$new_string = preg_replace_callback('/\{($[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/', 'test', $string);
function test($matches)
{
return '<?php echo '.$matches[1].'; ?>';
}
echo $new_string;
但它只是告诉我
Hello , how are you?
它会自动删除变量...
更新: 这是 var_dump:
D:\Wamp\www\t.php:5:string 'Hello <?php echo $username; ?>, how are you?' (length=44)
你想要这样的东西吗?
<?php
$string = 'Hello {$username}, how are you?';
$username = 'AAAAAA';
$new_string = preg_replace('/\{($[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/', $username, $string);
echo $new_string;
结果是:
Hello AAAAAA, how are you?
更简单的方法是只写
<?php
$username = 'AAAAAA';
$string = 'Hello '.$username.', how are you?';
我喜欢保持简单,所以我会使用 str_replace,因为它还会更改所有可能会在您前进时派上用场的实例。
$string = 'Hello {$username}, how are you?';
$username = 'AAAAAA';
echo str_replace('{$username}',$username,$string);
您可以使用键(您的变量)和值(它们的值)创建一个关联数组,然后在 $
之后捕获变量部分并使用它来检查 preg_replace_callback
回调如果有一个名为找到的捕获的键,则函数。如果是,则替换为相应的值,否则,替换为匹配项以将其放回找到的位置。
这是一个 example code in PHP:
$values = array('username'=>'AAAAAA', 'lastname'=>'Smith');
$string = 'Hello {$username}, how are you?';
$new_string = preg_replace_callback('/\{$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)}/', function($m) use ($values) {
return 'Hello <?php echo ' . (!empty($values[$m[1]]) ? $values[$m[1]] : $m[0]) . '; ?>';
}, $string);
var_dump($new_string);
输出:
string(47) "Hello Hello <?php echo AAAAAA; ?>, how are you?"
注意模式变化,我在 $
:
\{$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)}
^ ^
实际上,您甚至可以将其缩短为
\{$([a-zA-Z_\x7f-\xff][\w\x7f-\xff]*)}
^^