2016-06-20 11 views
2

Ich versuche, extrahieren Hashtags in einem HTML-Text mit dem regulären Ausdruck #([a-z0-9_]+), aber mit Schwierigkeiten in HTML-Attribute.Regex-Muster zu Hashtag, aber nicht in HTML-Attribute

Zum Beispiel im HTML-Text:

hola que tal with #hash1. 
hola que tal with #hash2 

y <a href="hola.que.tal#hash3"> para #hash4. </a> 

Ich mag erholen "hash1", "hash2" und "hash4" aber nicht "hash3".

Ich versuchte es mit lookarounds zu lösen, mit dem folgenden Ausdruck:

(?<!<)#([a-z0-9_]+)(?!.*?>) 

aber ohne Erfolg. Wie kann ich es mit einem einzigen regulären Ausdruck machen?

+0

Verwenden Sie einen HTML-Parser und eventuell eine Xpath-Abfrage, um nur auf Textknoten zu zielen. Verwenden Sie dann einen Basisregex, um Ihre Hashtags für jeden Textknoten zu finden. –

+0

Ich weiß, ich kann es in mehreren Schritten tun, aber ich muss es mit einem einzigen regulären Ausdruck tun. Danke @CasimiretHippolyte –

+0

Warum möchten Sie es mit nur einem Schritt (regulärer Ausdruck) tun? –

Antwort

2

sollten Diese

arbeiten
/#[a-z0-9_]+(?![^<]*>)/ 

Siehe http://www.regexpal.com/?fam=95144

die negative Vorschau Was tut, ist sicher macht, dass es eine < zwischen dem Hashtag ist und die nächste >.

+0

Große Regex. Ich füge das Ergebnis bei, weil ich das Ergebnis erfassen muss. Bearbeitet mit Ihrer Lösung. Vielen Dank! –