多次转义时替换所有反斜杠

时间:2014-11-26 19:22:59

标签: php mysql regex

我在我正在开发的应用程序中犯了一个错误,结果发现有一些文本有多次双引号转义,类似这样的

  

我们将从构建酒吧的正面和侧面开始。我们   将首先使用正面和侧面创建框架   2 \\\\\\\\" x 4 \\\\\\\\#34;然后将保护粒子   框架上的板面板。这个项目的标准是   42 \\\\\\\\"高大的60岁。\\\\\\\#34;广泛的   40 \\\\\\\\"深。你将在这里钻几个螺丝   项目。为了使这个过程更容易 - 首先钻孔导孔   使用Dremel旋转工具和150的螺丝在框架中拧紧   1/8 \\\\\\\\"钻头。

我正在寻找一种在数据库中进行更新的方法,可以快速删除所有这些斜杠,到目前为止我的想法是使用正则表达式,例如

for each($records as $record){
  $record->description = preg_replace(*/some patter here/*, $record->description);
  $record->save();
}

但是我很难找到正确的模式,所以也许有人可以帮忙解决这个问题,或者如果有更简单或更好的方法来更新这些记录,我真的很感激任何帮助!

2 个答案:

答案 0 :(得分:1)

您几乎不应该在数据库中存储反斜杠转义的内容。要清理它们,你可能想要这样的东西:

preg_replace( "/\\\\{2,}/", "", $record->description );

这将用空字符串替换2个或更多反斜杠的序列。如果有必要,你可以使它更具体 - 这样它只会匹配那些反斜杠序列,后跟双引号字符:

preg_replace( '/\\\\{2,}"/', '"', $record->description );

如果你想通过PHP来做这件事。您的数据库引擎可能具有内置的正则表达式替换功能,该功能允许您仅使用查询执行更新,如果这很重要,可能会提高性能。模式可能会相同。

我刚注意到你的MySQL标签。显然MySQL没有内置的正则表达式替换功能。见How to do a regular expression replace in MySQL?

我的建议是完全摆脱反斜杠转义然后在输出时根据需要转义,除非有充分的理由存储转义的内容。您当然可以更改替换字符串,以使用单个反斜杠或任何您想要的替换这些序列。

答案 1 :(得分:1)

preg_replace("/([\\]){2,}/", "\\", $record->description);

应该这样做。