请问这个替换内容怎么写正则表达式?

2015-08-06 08:17:41 +08:00
 CNCCTV
一个php配置文件的内容
<?php
$title='nihao';
$content1='<b style="color:red;">欢迎!</b>
<a href="reg.php" class="btn">注册</a>
<a href="login.php" class="btn">登录</a>';
$content2='站点暂时关闭
开放时间未知';
?>
content1和content2里的内容都是换行的。
第一个变我量能替换内容,但是第二个变量就出问题了。请问怎么写正这个则表达式啊?
2971 次点击
所在节点    PHP
25 条回复
popok
2015-08-06 16:20:55 +08:00
不怕啊,因为正则是';结尾的,所以就会匹配到;分号结束,内容里不要同时';连着出现就没问题啊
CNCCTV
2015-08-06 16:38:10 +08:00
@popok 为了防止提交的内容有单引号,我还是用正则来转义字符一下好了
// 把' 换成 \'
$new_content=preg_replace('/\'/',"\'",$new_content);
loveyu
2015-08-06 17:00:07 +08:00
修改配置不是应该直接使用$cfg = var_export(['name'=>'test'], true);这样生成的数组直接替换原文件么,正则替换不怕出错?
feiyuanqiu
2015-08-06 17:05:20 +08:00
@CNCCTV 我觉得你这个通过正则处理配置文件的思路不太好,要考虑很多输入情况,正则写起来很麻烦而且不容易写正确。

把配置文件弄成一个配置数组,要读取直接 include,要写入直接 var_export,简单又可靠

function setConfig($name, $value)
{
$configPath = __DIR__ . DIRECTORY_SEPARATOR . 'config.php';

static $config;
if (is_null($config)) {
$config = include $configPath;
}

register_shutdown_function(function () use (&$config, $configPath) {
if ($fp = fopen($configPath, 'w+')) {
$content = sprintf('<?php return %s;', var_export($config, true));
fwrite($fp, $content, strlen($content));
}
});

$config[$name] = $value;
}
fox0001
2015-08-06 18:35:43 +08:00
$conn=preg_replace('/'.$name.'=\'.+?\';/ims',
$name.'=\''.$new_content.'\';',
$conn);

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/211124

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX