我在该表中有大约40000条记录,其中包含纯文本,并且在纯文本中,包含那种标记,其唯一的特征是它们在[]
之间被支撑。[caption id="attachment_2948" align="alignnone" width="480" caption="the caption goes here"]
我怎么能删除那些? (什么都不替换)
如果有必要,我还可以运行PHP程序来进行清理。
答案 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}}模式就足够了