2010-08-13 45 views
2

嗨,有沒有什麼辦法可以用其他方法來替換mysql表中10個或更多的_(下劃線)出現的所有事件。Mysql替換正則表達式

背景 我已經繼承了爲網絡編寫的內容數據庫。

不幸的是,原始作者已經使用________________而不是<hr />作爲橫向規則。

這是一個WordPress的安裝,所以內容在一個名爲wp_posts的表中。

我能找到涉及以下查詢的帖子。

SELECT * 
FROM `wp_posts` 
WHERE `post_content` LIKE '%\_\_\_\_\_\_\_\_\_\_%' 

更新:

我可以找到使用下面還

SELECT `post_content` 
REGEXP '_{10,}' 
FROM `wp_posts` 
WHERE `post_content` LIKE '%\_\_\_\_\_\_\_\_\_\_%' 
LIMIT 0 , 30 

然而,只有返回1相匹配的職位,如果那裏有一個比賽不是0,如果沒有。

有沒有什麼辦法可以返回匹配的子字符串? 有沒有辦法讓表達貪婪?

+0

@Dominic羅傑什麼是錯誤的帖子你編輯它?只是想知道我做錯了什麼,以免再次發生。 – Wes 2010-08-13 12:56:18

+0

沒什麼太嚴重的(幾個拼寫錯誤,你需要反駁'


' - 它沒有出現在你的原始文章中)。這裏的人傾向於編輯東西來整理它們 - 它不一定反映在你身上,作爲問題提問者/回答者 - 本網站是協作編輯的(參見FAQ:http://stackoverflow.com/faq) – 2010-08-13 13:08:25

回答

4

MySQL沒有正則表達式替換,但你可以在沒有它的情況下做你想做的事情。

您可以使用REPLACE更換一個確切的字符串:

update `wp_posts` set `post_content` = replace(`post_content`,'__________','<hr />'); 

由於這是一次性的工作,我會通過尋找用於表示<hr />_史上最高計數開始 - 如果這是15,我首先運行該SQL命令與一個字符串與15 _ s,然後與14,然後與13,然後與......,然後與10.

+0

好的這是有用的,但我擔心原作者只是按住了他們認爲合適的長度。 雖然我可以使用正則表達式來找到這些lengts並將其傳遞給它。我會放棄這一點。 – Wes 2010-08-13 12:55:38

+0

如果使用正則表達式真的很重要,你可以將它作爲插件安裝在mysql中,請點擊此處:http://www.mysqludf.org/lib_mysqludf_preg/ – 2010-08-13 12:58:56

+0

好的這種爲我工作。但是我必須再次完成這項工作,我很想看到一個更清晰的解決方案 – Wes 2010-08-13 14:34:17