Найти и заменить фигурные метки в таблице MySQL - PullRequest
2 голосов
/ 16 апреля 2010

У меня около 40000 записей в этой таблице, которая содержит простой текст, а внутри простого текста содержит теги такого типа, единственная характеристика которых заключается в том, что они заключены в скобки между []

[caption id="attachment_2948" align="alignnone" width="480" caption="the caption goes here"]

Как я могу удалить их? (заменить ничем)

Я мог бы также запустить программу PHP, если необходимо выполнить очистку.

Ответы [ 4 ]

2 голосов
/ 16 апреля 2010

Попробуйте

$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 голос
/ 16 апреля 2010

Нет простого способа сделать это в MySQL - он не имеет замен на основе регулярных выражений. Самый простой способ - загрузить все строки и выполнить замену в 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);
} 
0 голосов
/ 16 апреля 2010

вам нужно будет запустить программу PHP, так как в mysql нет замены на основе регулярных выражений.
'~\[.*?\]~' шаблон будет достаточно

0 голосов
/ 16 апреля 2010

Это так просто или я что-то упустил?

$text = preg_replace('/\[[^[]*\]/', $text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...