需要定期的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
不要用正则表达式解析HTML。 HTML不规则。
谢谢,我同意你的回答。但除了span-tags外,没有其他html标签存在,并且它确保没有跨度可以在另一个跨度内,所以跨度仅仅表示带有id的括号。也许以后我会用JavaScript和DOM来处理。 – hansa 2010-02-23 12:00:38
我会做两步版本,首先找到span标记有:
<span[^>]*class=\"classname\"[^>]*>
然后挖出从配合
id=\"(\d+)\"
正如其他第一图案标签的ID已经指出,用正则表达式解析HTML并不是一个好主意。但对于肮脏的数据处理,这是我如何做到这一点。
谢谢,我用这个解决方案,它的工作原理。欲了解更多信息,请参阅Paul Tomblin的答案。 – hansa 2010-02-23 12:02:06
这应做到:
String r = "<span (?=[^<>]*\\bclass=\"className\")[^<>]*\\bid=\"(\\d+)\"[^<>]*>";
先行确认跨度是期望类的不消耗任何字符。然后,正则表达式的其余部分从相同的位置开始,搜索id属性并捕获其值。 [^<>]*
负责处理可能存在的任何其他属性,同时确保所有匹配都发生在标记内。 (技术上,尖括号可以出现在属性值中,但您可能不必担心这一点。)
+1不错,尽管解析器更适合这项任务。 – BalusC 2010-02-20 22:43:23
@BalusC:那里没有任何参数,但是我认为如果可以不使用Cthulhu的名字,那么给出正则表达式的答案会更有帮助。这样我可以具体解释为什么这个任务比OP期望的更复杂。 “HTML不规则”根本没有任何帮助。 – 2010-02-20 23:21:43
如果你理解(或者懒得查找)“规则”在解析计算机语法方面的含义,那么“HTML不规则”是很多帮助。如果你理解(或查阅)常规手段,你会立即明白,你无法编写正确解析HTML的正则表达式。根据定义,这不可能。 – 2010-02-21 04:30:42
您是否考虑过使用HTML解析器而不是正则表达式? – 2010-02-20 21:30:01