Php 在MySQL表中查找并替换大括号标记

Php 在MySQL表中查找并替换大括号标记,php,mysql,regex,replace,Php,Mysql,Regex,Replace,我在那个表中有大约40000条记录,包含纯文本,在纯文本中,包含那种标记,它唯一的特点是它们被放在[]之间 [caption id="attachment_2948" align="alignnone" width="480" caption="the caption goes here"] 我怎样才能把它们去掉?(以零代替) 如果有必要,我还可以运行一个PHP程序来进行清理。试试看 $text = preg_replace('/\[\w+(?:\s+\w+="[^"]+")+\s*\]/',

我在那个表中有大约40000条记录,包含纯文本,在纯文本中,包含那种标记,它唯一的特点是它们被放在[]之间

[caption id="attachment_2948" align="alignnone" width="480" caption="the caption goes here"]
我怎样才能把它们去掉?(以零代替)

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

试试看

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

  • 标签内至少应有一个属性(例如,
    [caption id=“attachment_2948”]
    ,只是
    [caption]
    不匹配)
  • 属性必须在双引号内(
    “附件”
  • 属性引号内没有
    \”
    (这将不起作用-
    “attachme\”nt\U 2948“
  • 属性中可以有[](例如,
    [caption caption=“此处有[caption]”
  • 并确保在更改任何内容之前进行了数据库备份

这么简单还是我错过了什么

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

在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);
} 

您需要运行一个PHP程序,因为mysql没有基于regexp的replace。

“~\[.*?\]~”
模式就足够了

我怀疑是否需要这样一个conplex regexp,因为“它唯一的特点是它们被放在[]之间”@Col.Shrapnel,好吧,你可能是对的,但我只是不希望他的40000条记录因为我而被弄乱,因为括号[]可以用于其他用途。这正是我想要的,非常感谢你的注释。“做清理”-所以这是一项一次性工作,而不是每天要处理数以百万计的请求的工作?