MySQL正则表达式查询
我试图从具有以下结构的数据库中选择表中的所有行:MySQL正则表达式查询,mysql,regex,Mysql,Regex,我试图从具有以下结构的数据库中选择表中的所有行: <tr> <td> <p><strong>Completion Date:</strong></p> </td> <td> <p>April, 2012</p> </td> </tr> 完成日期: 2012年4月 但是月份和年份可能不同 以下是我当前的查询语句: SELECT * FROM `pos
<tr>
<td>
<p><strong>Completion Date:</strong></p>
</td>
<td>
<p>April, 2012</p>
</td>
</tr>
完成日期:
2012年4月
但是月份和年份可能不同
以下是我当前的查询语句:
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>"
SELECT*FROM`posts`WHERE`content`REGEXP'\r\n\r\n完成日期:\r\n\r\n\r\n2012年4月\r\n\r\n
目前,这只会拉到2012年4月的行,这是我期望它拉到的。我试着用:^[A-Za-z]$来代替这个月,但这不起作用,也没有任何其他组合
有人能帮我找到正确的正则表达式吗
谢谢
-M这应该会给出您想要的结果。请注意您如何需要星号,它表示0个或更多
[a-zA-Z]
,以及0个或更多[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>"
SELECT*FROM`posts`WHERE`content`REGEXP'\r\n\r\n完成日期:\r\n\r\n\r\n[a-zA-Z]*,[0-9]*\r\n\r\n
插入符号^
和美元符号$
匹配字符串的开头和结尾。由于日期不在开头,因此这些日期与您的日期不匹配
祝你好运。这会给出你想要的结果。请注意您如何需要星号,它表示0个或更多
[a-zA-Z]
,以及0个或更多[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>"
SELECT*FROM`posts`WHERE`content`REGEXP'\r\n\r\n完成日期:\r\n\r\n\r\n[a-zA-Z]*,[0-9]*\r\n\r\n
插入符号^
和美元符号$
匹配字符串的开头和结尾。由于日期不在开头,因此这些日期与您的日期不匹配
祝你好运。
^[A-Za-z]$
将匹配一行中的单个字母字符(^
表示字符串的开头,$
表示字符串的结尾)
您可能会更幸运地使用以下内容:[A-Z][A-Z]*,\s*[0-9]{4}
。解释:
-1个大写字母[A-Z]
-任意数量的小写字母(包括其中的0个)[a-z]*
-逗号,
-任意数量的空格(包括其中的0个)\s*
-正好是4位数字[0-9]{4}
^[A-Za-z]$
将匹配一行中的单个字母字符(^
表示字符串的开头,$
表示字符串的结尾)
您可能会更幸运地使用以下内容:[A-Z][A-Z]*,\s*[0-9]{4}
。解释:
-1个大写字母[A-Z]
-任意数量的小写字母(包括其中的0个)[a-z]*
-逗号,
-任意数量的空格(包括其中的0个)\s*
-正好是4位数字[0-9]{4}
[a-zA-Z]+,\d{4}
当然,这将需要任何单词和任何4位数的年份。如果要添加更多支票,可以:
(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月),(19 | 20){2}
这个新的正则表达式将匹配可能的有效月份,并检查年份是19xx还是20xx。如果只是月份和年份,您可以执行以下操作:
[a-zA-Z]+,\d{4}
当然,这将需要任何单词和任何4位数的年份。如果要添加更多支票,可以:
(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月),(19 | 20){2}
这个新的正则表达式将从可能的有效月份开始匹配,并检查年份是19xx年还是20xx年。使用[A-Za-z]*不带卡雷特和美元符号来匹配它。我知道这不是答案,但EWW!这是在数据库中存储数据的可怕方式。使用[a-Za-z]*而不使用卡雷特和美元符号来匹配它。我知道这不是一个答案,但是EWW!在数据库中存储数据是一种可怕的方式。哦,我觉得很有趣!谢谢是的,问号不属于那里;我已编辑答案以删除它们。(在PCRE风格的regexp中,
*?
与*
的意思相同,只是它试图匹配尽可能少的字符,但据我所知,它不支持这种非贪婪匹配。无论如何,即使它起作用,在这里也不会有什么区别。)啊,我一直习惯于在perl风格中使用非贪婪*匹配。谢谢你的信息。哦,我觉得很有趣!谢谢是的,问号不属于那里;我已编辑答案以删除它们。(在PCRE风格的regexp中,*?
与*
的意思相同,只是它试图匹配尽可能少的字符,但据我所知,它不支持这种非贪婪匹配。无论如何,即使它起作用,在这里也不会有什么区别。)啊,我一直习惯于在perl风格中使用非贪婪*匹配。谢谢你的信息。