Java中用于解析Hashtags的正则表达式

6

这是我正在尝试解析的Twitter消息(正如您所看到的,其中一些不是标签,而只是URL的一部分):

#anothertag Arrogance and bad PR http://www.adobe.com/index.html#anchor1. John 
Nack on &#Adobe: Information about Photoshop© CS3 on Snow Leopard 
#fail #design</pre>

这是我目前的正则表达式,但它仍然会捕获一些url标签:

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

那么你究竟想得到什么?你能提供期望的结果吗? - serg
抱歉,我应该更清楚地表达。我正在尝试进行匹配,以查找给定推文中的所有标签。我期望上面的推文将返回“anothertag”,“fail”和“design”。 - Daniel Dura
你试过这个吗?https://dev59.com/SnI_5IYBdhLWcg3wBuNs#5768660arcain提供的正则表达式基于Twitter的代码,如果我理解正确,它确保消息不以井号开头。如果您想禁用它,可以删除第一个带括号的组。应该提到,我个人没有测试过这个正则表达式 :) - johncip
1
这里有一个更好的答案:https://dev59.com/-VTTa4cB1Zd3GeqPq0jq - Panthro
3个回答

6

很有讽刺意味,我一发帖子就找到了答案。所以,如果你正在寻找匹配模式来做这件事,以下内容似乎有效:

(?:\s|\A)[##]+([A-Za-z0-9-_]+)

我将进行更多测试,看看是否有任何超出此表达式范围的边缘情况,并在发现任何问题时进行报告。


5
(?:\s|\A|^)[##]+([A-Za-z0-9-_]+) 也接受在推文开头的井号。 - benjguin

3

我认为这个

(\s|\A)#(\w+)

这样做同样有效,并且更加精确。顺便说一下,当使用Java正则表达式时,我总是使用regexplanet测试我的表达式。比在Java中测试要快得多。

--Hardy


3

@Daniel Dura: [##] 这个符号是没有意义的。方括号 [] 用于表示字符类。[##] 和 [#] 是一样的。而 [##]+ 和 [#]+ 也是一样的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接