需要定期的expr。对于属性顺序不重要的html元素

问题描述:

我需要一个正则表达式来检测一个span和id类和class的顺序无关的span元素。类的名字总是相同的ID始终有固定数量的数字,例如:需要定期的expr。对于属性顺序不重要的html元素

<span class="className" id="123"> 

<span id="321" class="className" > 

我在Java正则表达式的方法是:

String pattern = "<span class=\"className\" id=\"\\d*\">"; 

但我只能得到一个版本。可以帮助吗?

谢谢,hansa

+0

您是否考虑过使用HTML解析器而不是正则表达式? – 2010-02-20 21:30:01

不要用正则表达式解析HTML。 HTML不规则。

+0

谢谢,我同意你的回答。但除了span-tags外,没有其他html标签存在,并且它确保没有跨度可以在另一个跨度内,所以跨度仅仅表示带有id的括号。也许以后我会用JavaScript和DOM来处理。 – hansa 2010-02-23 12:00:38

我会做两步版本,首先找到span标记有:

<span[^>]*class=\"classname\"[^>]*> 

然后挖出从配合

id=\"(\d+)\" 

正如其他第一图案标签的ID已经指出,用正则表达式解析HTML并不是一个好主意。但对于肮脏的数据处理,这是我如何做到这一点。

+0

谢谢,我用这个解决方案,它的工作原理。欲了解更多信息,请参阅Paul Tomblin的答案。 – hansa 2010-02-23 12:02:06

这应做到:

String r = "<span (?=[^<>]*\\bclass=\"className\")[^<>]*\\bid=\"(\\d+)\"[^<>]*>"; 

先行确认跨度是期望类的不消耗任何字符。然后,正则表达式的其余部分从相同的位置开始,搜索id属性并捕获其值。 [^<>]*负责处理可能存在的任何其他属性,同时确保所有匹配都发生在标记内。 (技术上,尖括号可以出现在属性值中,但您可能不必担心这一点。)

+0

+1不错,尽管解析器更适合这项任务。 – BalusC 2010-02-20 22:43:23

+0

@BalusC:那里没有任何参数,但是我认为如果可以不使用Cthulhu的名字,那么给出正则表达式的答案会更有帮助。这样我可以具体解释为什么这个任务比OP期望的更复杂。 “HTML不规则”根本没有任何帮助。 – 2010-02-20 23:21:43

+0

如果你理解(或者懒得查找)“规则”在解析计算机语法方面的含义,那么“HTML不规则”是很多帮助。如果你理解(或查阅)常规手段,你会立即明白,你无法编写正确解析HTML的正则表达式。根据定义,这不可能。 – 2010-02-21 04:30:42