用于SQL查询的Hashtag RegEx

时间:2010-07-30 19:18:13

标签: mysql regex

所以我试图将hashtag搜索结合到我的应用程序的帖子中。我想出了一些接近的正则表达式,但似乎都没有。假设我有一个字符串:

#i keep #hashtags in my mom's attic. She says I am her number #1 son. Why I'm not num#ber #2: http://pics.com/pic#thepic

我希望RegEx匹配:

  • I

  • 主题标签

  • 1

  • 2

我希望它特别不匹配HTML实体,URL中的#anchors,从单词中间开始的主题标签,以及标签后的任何尾随标点符号。我还想确保它匹配字符串开头的主题标签,以及完全数字的主题标签。我希望它也允许在主题标签中使用连字符和下划线。这是针对MySQL查询的,因此Lookaheads和Lookbacks不起作用。

目前我坚持的是:

#([A-Za-z0-9_]+)

但它并没有真正完成这项工作。 RegEx是一个我的知识有点缺乏的领域。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

以下匹配您想要匹配的所有示例,并拒绝所有您不想匹配的示例:

WHERE mycolumn REGEXP '^#[[:alnum:]]' OR mycolumn REGEXP ' #[[:alnum:]]'

您不必匹配整个主题标签,因为SQL无论如何都不会返回该字符串,它只返回1(匹配)或0(不匹配)。要提取主题标签字符串,您必须在应用程序编程语言中使用其他一些字符串操作。

答案 1 :(得分:0)

我认为你坚持在3轮中测试它:

`txt` REGEXP '^#[0-9a-zA-Z]+[: ,]';
OR `txt` REGEXP '[: ,]#[0-9a-zA-Z]+[: ,]';
OR `txt` REGEXP '[: ,]#[0-9a-zA-Z]+$';

或者你当然可以

CONCAT(" ",`txt`," ") REGEXP '[: ,]#[0-9a-zA-Z]+[: ,]';
无论哪种方式,都会变得凌乱。当然,[: ,]可能会扩展到您认为不属于' ...

之类的内容