2009-08-27 8 views
6

Voici le message Twitter Je suis en train d'analyser (comme vous pouvez le voir, certains d'entre eux ne sont pas des étiquettes, une partie seulement des URL):Expression régulière pour parser hashtags en Java

#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> 

Cette expression régulière est ce que j'ai jusqu'à présent, mais il ramasse encore quelques balises url:

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

Alors, qu'est-ce que vous essayez d'obtenir exactement? Pouvez-vous fournir le résultat attendu? – serg

+0

Désolé, j'aurais dû être plus clair. J'essaie de faire un match pour trouver ce que sont tous les tags dans un tweet donné. Je m'attendrais à ce que le tweet d'en haut renvoie "anothertag", "fail" et "design". –

+0

Avez-vous essayé celui-ci? http://stackoverflow.com/questions/1563844/best-hashtag-regex/5768660#5768660 Le regex arcain fournit est basé sur le code de Twitter et si je le lis bien il assure que le message ne commence pas avec un hashtag. Si vous voulez désactiver cela, vous pouvez supprimer le premier groupe parenthésé. Doit mentionner que je n'ai pas testé cette regex personnellement si :) – johncip

Répondre

6

est-il pas ironique, dès que je poste ce que je trouve une réponse. Donc, si vous cherchez un motif correspondant pour faire cela, ce qui suit semble fonctionner:

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

Je vais faire beaucoup plus de tests avec ceci pour voir s'il y a des cas de bords qui sortent du cadre de cette expression et je ferai un rapport si j'en trouve.

+5

(?: \ s | \ A | ^) [##] + ([A-Za-z0-9 -_] +) accepte aussi un hashtag au tout début du tweet – benjguin

3

Je pense que cela fonctionne aussi bien

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

et est un peu plus précis. BTW, lorsque je travaille avec des expressions régulières Java, j'utilise toujours regexplanet pour tester mes expressions. Beaucoup plus rapide que de tester en Java.

--Hardy

3

Dura @ Daniel: [##] ce qui est censé être inutile. Les crochets [] sont utilisés pour désigner les classes de caractères. [##] est identique à [#]. Et [##] + est identique à [#] +.