我正在尝试从具有以下结构的数据库中选择表中的所有行:
<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 :(得分: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。