Bul ve MySQL tablo içinde çaprazlı etiketleri değiştirmek

3 Cevap php

Ben düz metin içeren ve düz metin içinde bu tablodaki yaklaşık 40000 kayıtları var, onun sadece karakteristik onlar [] arasındaki hazırladı olmasıdır etiketleri bu tür içerir

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

O nasıl kaldırabilirsiniz? (Hiçbir şey ile değiştirin)

Gerekirse ben de temizlik yapmak için bir PHP programı çalıştırabilir.

3 Cevap

Denemek

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

Not:

  • etiketi içinde en az bir özellik olmalıdır (örneğin, [caption id="attachment_2948"], sadece [caption] maç olmayacak)
  • öznitelikleri, çift tırnak içinde olmalıdır ("attachment_2948")
  • Hiçbir \" nitelikler tırnak içinde (- "attachme\"nt_2948" bu iş olmaz) var
  • Eğer [] nitelikleri içinde (örneğin, [caption caption="the [caption] goes here"]) sahip olabilir
  • ve hiçbir şey değiştirmeden önce veritabanı yedekleme yaptım emin olun.

MySQL bunu yapmak için kolay bir yolu yoktur - bu sıradanifade dayalı cümledeki yoktur. Kolay yolu tüm satırları yüklemek ve PHP değiştirme yapmak, gibi bir şey için:

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

Bu kadar kolay ya da ben bir şey cevapsız?

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