2013-07-25 50 views
1

我試圖從具有以下結構的數據庫中選擇表中的所有行:MySQL的REGEXP查詢

<tr> 
<td> 
<p><strong>Completion Date:</strong></p> 
</td> 
<td> 
<p>April, 2012</p> 
</td> 
</tr> 

但年份和月份可能會有所不同。

這裏是我當前的查詢語句:

SELECT * FROM `posts` WHERE `content` REGEXP "<tr>\r\n<td>\r\n<p><strong>Completion Date:</strong></p>\r\n</td>\r\n<td>\r\n<p>April, 2012</p>\r\n</td>\r\n</tr>" 

目前這隻會拉有2012年4月,這是我希望它拉行。我試圖用:^ [A-Za-z] $來代替月份,但這不起作用,也沒有任何其他組合我累了。

有人可以幫助正確的正則表達式嗎?

感謝,

-M

+0

使用[A-Za-z] *沒有地毯和美元符號來匹配它。 – beiller

+2

我知道這不是答案,但_ewww!_這是一種將數據存儲在數據庫中的方法。 –

回答

1

這應該給你正在尋找的結果。注意你如何需要星形,意思是0或更多[a-zA-Z],以及零個或更多[0-9]個字符。

SELECT * FROM `posts` WHERE `content` REGEXP "<tr>\r\n<td>\r\n<p><strong>Completion Date:</strong></p>\r\n</td>\r\n<td>\r\n<p>[a-zA-Z]*, [0-9]*</p>\r\n</td>\r\n</tr>" 

插入符號^和美元符號$比賽開始和字符串的結尾。由於日期不是一開始,所以這些都不適合你。

祝你好運。

+0

這工作減去?在末端。 – m1a2x3x7

+0

哦,我看到有趣!謝謝! – beiller

+0

是的,問號不屬於那裏;我編輯了答案以刪除它們。 (在PCRE風格的正則表達式中,'*?'與'*'的含義相同,只是儘量匹配儘可能少的字符,但據我所知,[MySQL的正則表達式引擎](http:// dev .mysql.com/doc/refman/5.7/en/regexp.html)不支持這種不合理匹配。無論如何,即使它工作,這裏也沒有什麼區別。) –

0

^[A-Za-z]$將匹配一行上的單個字母字符(^用於字符串的開始,$用於字符串的結尾)。

你可能會有更多的運氣,如:[A-Z][a-z]*,\s*[0-9]{4}。爲了解釋:

  • [A-Z] - 1個大寫字母
  • [a-z]* - 任意數量的小寫字母(包括它們的0)
  • , - 逗號
  • \s* - 任意數量的空格(包括0他們)
  • [0-9]{4} - 是4位數
0

我F IT只是一個月,一年你可以這樣做:

[a-zA-Z]+, \d{4}

當然,這會採取任何文字和任何4位年份。如果你想添加更多的檢查,則可能是:

(January|February|March|April|May|June|July|August|September|October|November|December), (19|20)\d{2}

這個新的正則表達式將匹配來自可能的有效月,也檢查一年是19XX或20XX。