MySQL REGEXP查询

时间:2013-07-25 18:37:47

标签: mysql regex

我正在尝试从具有以下结构的数据库中选择表中的所有行:

<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

3 个答案:

答案 0 :(得分: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>"

插入符^和美元符号$匹配字符串的开头和结尾。由于日期不在开头,因此这些不适合您。

祝你好运。

答案 1 :(得分:0)

^[A-Za-z]$将匹配一行上的单个字母字符(^表示字符串的开头,$表示字符串的结尾。

你可能会有更多运气:[A-Z][a-z]*,\s*[0-9]{4}。解释:

  • [A-Z] - 1个大写字母
  • [a-z]* - 任意数量的小写字母(包括其中0个)
  • , - 逗号
  • \s* - 任意数量的空格(包括其中0个)
  • [0-9]{4} - 正好4位数

答案 2 :(得分:0)

如果只是月份和年份,你可以这样做:

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

当然,这将取任何单词和任何4位数年份。如果您想添加更多支票,可以是:

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

这个新的正则表达式将与可能的有效月份匹配,并检查年份是19xx还是20xx。