1

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

<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

4

3 回答 3

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>"

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

祝你好运。

于 2013-07-25T18:46:11.967 回答
0

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

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

  • [A-Z]- 1 个大写字母
  • [a-z]*- 任意数量的小写字母(包括其中的 0 个)
  • ,- 一个逗号
  • \s*- 任意数量的空格(包括其中的 0 个)
  • [0-9]{4}- 正好 4 位数
于 2013-07-25T18:46:21.240 回答
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。

于 2013-07-25T18:48:44.503 回答