2010-09-28 41 views
-1

我需要来标记以下标签:如何使用正则表达式解析XML类标签

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

我想编写正则表达式来做到这一点,但麻烦的是,属性值可以包含空格,所以我不能随空间分裂。

+6

[你真的不应该尝试用正则表达式解析XML](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454# 1732454)。 – eliah 2010-09-28 14:54:42

+1

你需要一个真正的解析器。你可以使用'indexOf'自己编写一个(毕竟它只是一个带有堆栈的状态机器),但更好的是使用解析器生成器,如Antlr:http://www.antlr.org/ – Anon 2010-09-28 15:06:42

+0

标记不是复合的而且这件事情就像它变得复杂一样,所以我认为它可能比完整的Xml更简单一些...... – Dan 2010-09-28 15:38:03

回答

1

不能比这更明确提出:

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

请解释为什么你需要正则表达式...

和,你没有说你的首选语言什么.. 。

假设的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"; 
} 

但是,再次,不要使用正则表达式!

+0

the classic post:http://stackoverflow.com/questions/1732348/regex-match-open-tags -except-xhtml-self-contained-tags/1732454 – bsamek 2010-09-28 15:09:14

+0

优先语言是java – Dan 2010-10-15 15:43:08