在MySQL表中查找并替换支撑标签

时间:2010-04-16 11:18:00

标签: php mysql regex replace

我在该表中有大约40000条记录,其中包含纯文本,并且在纯文本中,包含那种标记,其唯一的特征是它们在[]

之间被支撑。
[caption id="attachment_2948" align="alignnone" width="480" caption="the caption goes here"]

我怎么能删除那些? (什么都不替换)

如果有必要,我还可以运行PHP程序来进行清理。

4 个答案:

答案 0 :(得分:2)

尝试

$text = preg_replace('/\[\w+(?:\s+\w+="[^"]+")+\s*\]/', '', $text)

注意:

  • 标签内应该至少有一个属性(例如,[caption id="attachment_2948"],只有[caption]不匹配)
  • 属性必须位于双引号内("attachment_2948"
  • 属性引号中没有\"(这不起作用 - "attachme\"nt_2948"
  • 你可以在属性中加入[](例如,[caption caption="the [caption] goes here"]
  • 并确保在更改任何内容之前进行了数据库备份。

答案 1 :(得分:1)

在MySQL中没有简单的方法 - 它没有基于regexp的替换。最简单的方法是加载所有行并在PHP中进行替换,例如:

$result = mysql_query('SELECT * FROM table');
while ($row = mysql_fetch_array($result)) {
   $id = $row['ID'];
   $field = $row['Field'];
   $field = preg_replace('/\[[^\]]+\]/', '', $field); 
   $escaped = mysql_real_escape_string($field);
   $sql = mysql_query('UPDATE table SET Field = ' . $escaped . ' WHERE ID = ' . $id);
} 

答案 2 :(得分:0)

这很容易还是我错过了什么?

$text = preg_replace('/\[[^[]*\]/', $text);

答案 3 :(得分:0)

你需要运行一个PHP程序,因为mysql没有基于regexp的替换 <{1}}模式就足够了