2010-09-28 12 views
-1

J'ai besoin de tokenizer balise suivante:Comment analyser une étiquette comme Xml avec l'expression régulière

{TagName attrib1=”value1” attrib2=”value 3”}. 

Je voudrais écrire regex de le faire, mais le problème est que la valeur d'attribut peut contenir espace, Je ne peux pas juste diviser avec l'espace.

+6

[Vous ne devriez vraiment pas essayer d'analyser XML avec des expressions régulières] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454# 1732454). – eliah

+1

Vous avez besoin d'un vrai analyseur. Vous pouvez en écrire un vous-même en utilisant 'indexOf' (c'est juste une machine d'état avec une pile, après tout), mais mieux vaut utiliser un générateur d'analyseur syntaxique tel que Antlr: http://www.antlr.org/ – Anon

+0

les étiquettes ne sont pas composées et c'est à peu près aussi compliqué que ça, donc j'ai pensé que ça pourrait être un peu plus simple que du Xml complet ... – Dan

Répondre

1

ne peut pas être mis plus clairement que ceci:

http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html

s'il vous plaît expliquer pourquoi vous avez besoin ... regexp

et, vous ne dites rien au sujet de votre langue préférée .. .

en supposant perl:

$str = "{TagName attrib1=\"value1\" attrib2=\"value 3\"}"; 

if ($str =~ m/{(\w+)\s+(\w+)="(.*?)"\s+(\w+)="(.*?)"/) 
{ 
    print "tagname: $1\n"; 
    print "attrib: $2\n"; 
    print "value: $3\n"; 
    print "attrib: $4\n"; 
    print "value: $5\n"; 
} 

Mais encore une fois, n'utilisez pas d'expressions rationnelles pour cela !!

+0

le post classique: http://stackoverflow.com/questions/1732348/regex-match-open-tags -except-xhtml-self-contained-tags/1732454 – bsamek

+0

langue préferée est java – Dan