我试图用正则表达式替换wp-config中的某些内容,但我无法让它工作。
这是我的正则表达式模式:
(?=DB_NAME', ')(.*?)(?<='\);)
这是配置的片段:
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'database_name_here');
/** MySQL database username */
define('DB_USER', 'username_here');
想法是替换database_name_here 和php:
$configContent = preg_replace("/(?=DB_NAME', ')(.*?)(?<='\);)/", $databaseName, $configContent);
结果如下:
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('database-name
/** MySQL database username */
define('DB_USER', 'username_here');
所以模式不起作用。但我不知道如何解决它。为什么组中包含了外观?
我不使用str_replace并替换database_name_here的原因是因为我将在多种语言中使用它。并且database_name_here已翻译成其他语言。
答案 0 :(得分:4)
你已经改变了前瞻和后瞻的顺序。
"/(?=DB_NAME', ')(.*?)(?<='\);)/"
应该是:
"/(?<=DB_NAME', ')(.*?)(?='\);)/"
答案 1 :(得分:2)
更改为:
$configContent = preg_replace("/(?=DB_NAME', ')(.*?)(?='\);)/", $databaseName, $configContent);
// here ___^
答案 2 :(得分:1)
$configContent = preg_replace(
'/define\([\s]*[\'"]DB_NAME[\'"][\s]*,' .
'[\s]*[\'"][^\'"]*[\'"][\s]*\)/i',
"define('DB_NAME', '{$databaseName}')",
$configContent);