MySQL匹配这个正则表达式,而它不应该

时间:2015-02-23 17:57:36

标签: mysql regex

我试图在一个降价文本中引用(引用)某人的其他句子,我在我的MySQL GHTorrent数据集的本地副本中。所以我写了这个查询:

select * from github_discussions where body rlike '(.)*(\s){1,}(>)(\s){1,}(.)+';

它匹配一些不需要的数据,根据https://regex101.com/,它不应该使用这个特定的正则表达式。

测试字符串:

`Params` is plural -> contain<s>s</s>

在MySQL数据库上匹配,在regex101 dot com上不匹配。

引用的明显示例,但在db:

处不匹配
Yes, I believe so.\r\n\r\n\r\n\r\nK\r\n\r\n> On 19-Jul-2014, at 17:33, Stefan Karpinski <notifications@github.com> wrote:\r\n> \r\n> This is the standard 3-clause BSD license, right?\r\n> \r\n> —\r\n> Reply to this email directly or view it on GitHub.

此外,除非在此处复制粘贴,否则MySQL工作台不会显示这些回车和换行符号。

我可以通过一些更新查询来规范化(删除\ r和\ n)吗?

MySQL正则表达式实现是否与POSIX标准正则表达式不同? 您是否有任何机会最大限度地清除解决方案以识别降价文本中的引用?

谢谢!

1 个答案:

答案 0 :(得分:0)

你那里有很多的parens。请尝试以上功能:

select * from github_discussions where body rlike '.*[:blank:]+>[:blank:]+.+'

但是,我不确定你真正想要的是什么。这很符合这一行:

this is before > and after

根据我的理解,它不是markdown中的引用字符串。相反,我会像这样在开头锚定它:

select * from github_discussions where body rlike '^[:blank:]*>[:blank:]+'

这将匹配行开头的大于号,可选地前面有空格。那是你在找什么?

我不确定您的数据是否嵌入了换行符。如果是这样,您可能需要研究使用^锚定符号让正则表达式识别换行符的方法。正如在正则表达式文献中公认的结论一样,留给学生作为练习。: - )