2011-05-20 89 views
0

可能重複:
Simulating regex capture groups in mysql使用正則表達式在「標籤」中提取MySQL數據?

好日子,

我存儲在MySQL表多行數據。一個典型的價值可能是這個樣子:

::image-gallery:: 
::gallery-entry::images/01.jpg::/gallery-entry:: 
::/image-gallery:: 

有沒有一種方法 - 用正則表達式,我可以一)提取第一行術語圖片庫的方式(它可以是任何的短語,而不僅僅是圖像庫),然後提取中心線作爲兩個單獨的這樣:

庫條目,然後圖像/ 01.JPG

可能有::庫條目的許多線::值,它們也可以被稱爲任何東西。更完整的示例將是:

::image-gallery:: 
::title::MY GALLERY::/title:: 
::date::2011-05-20::/date:: 
::gallery-entry::images/01.jpg::/gallery-entry:: 
::/image-gallery:: 

在本質上我想這樣的信息:在上述情況下,第一行和最後一行的內容類型(圖像庫)。然後我需要標題作爲關鍵值樣式對,所以標題作爲關鍵字,我的相冊作爲值。然後,隨後,我需要所有的字段行(gallery-entry)作爲關鍵值對。

這是一個遷移腳本,其中舊系統的數據將以不同語法遷移到新系統。

如果MySQL select語句不起作用,用PHP腳本解析數據提取結果會更容易嗎?

任何和所有的幫助總是讚賞。

親切的問候, 西蒙

+1

這些例子在表中代表單個行?我猜想一個僅用於sql的解決方案將很難實現。從快速查看MySQL中的正則表達式支持(http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp),我認爲PHP或任何其他您喜歡的語言將是一種更簡單的方法。 – 2011-05-20 12:00:24

+0

你好,你可能需要對數據的可能結構更加具體:做標籤自己包含多個結果集行('image-gallery')嗎? – collapsar 2011-05-20 14:31:37

+0

@paul W - 對不起,這樣的延遲響應。但事實上,我最終用PHP的preg_match()函數進行了一些簡單的模式匹配。感謝您的反饋。 – SimonDowdles 2011-07-07 14:15:57

回答

0

試試這個正則表達式:

::image-gallery::\s+::title::(.*?)::/title::.*?::gallery-entry::(.*?)::/gallery-entry::\s+::/image-gallery:: 
  1. 使用單行模式(/模式/秒),所以*?咀嚼換行符。
  2. 你的鍵值對將是: 標題:$ 1(匹配第1組) 畫廊入境:$ 2(匹配組2)
0

simulating-regex-capture-groups-in-mysql似乎有沒有一種方法來輕鬆捕獲在mysql中使用正則表達式組。原因是MySQL本身不支持正則表達式中的捕獲組。如果你想要這個功能,你可以使用像lib_mysqludf_preg這樣的服務器端擴展來將這個功能添加到MySQL中。

最簡單的方法是用SQL提取整列,然後用另一種語言(如php)進行文本匹配。

在我的測試kenbritton的正則表達式沒有工作,但建築關閉它下面的正則表達式上的測試數據的工作:

::image-gallery::\s+::title::(.*?)::\/title::\s+(?:.*\s+)*::gallery-entry::(.*?)::\/gallery-entry::\s+::\/image-gallery::