Php 在MySQL表中查找并替换大括号标记
我在那个表中有大约40000条记录,包含纯文本,在纯文本中,包含那种标记,它唯一的特点是它们被放在[]之间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*\]/',
[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条记录因为我而被弄乱,因为括号[]可以用于其他用途。这正是我想要的,非常感谢你的注释。“做清理”-所以这是一项一次性工作,而不是每天要处理数以百万计的请求的工作?