所以我试图将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匹配:
我希望它特别不匹配HTML实体,URL中的#anchors,从单词中间开始的主题标签,以及标签后的任何尾随标点符号。我还想确保它匹配字符串开头的主题标签,以及完全数字的主题标签。我希望它也允许在主题标签中使用连字符和下划线。这是针对MySQL查询的,因此Lookaheads和Lookbacks不起作用。
目前我坚持的是:
#([A-Za-z0-9_]+)
但它并没有真正完成这项工作。 RegEx是一个我的知识有点缺乏的领域。谢谢你的帮助!
答案 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]+[: ,]';
无论哪种方式,都会变得凌乱。当然,[: ,]
可能会扩展到您认为不属于'
... 之类的内容