正则表达式,如何取HTML标签的属性。
<ahref="abc.html"class="a">页面一</a><ahref="eee.html"class="e">页面二</a>我想取页面二的那个a标签的href...
<a href="abc.html" class="a">页面一</a><a href="eee.html" class="e">页面二</a>
我想取 页面二的那个a标签的 href 和 页面二 这两个信息. 怎么写. 展开
我想取 页面二的那个a标签的 href 和 页面二 这两个信息. 怎么写. 展开
1个回答
展开全部
<a href=\"(.+?)\" class=\"e\">(.+?)</a>
(.+?):“()”是分组匹配,“.”是任意字符匹配,“+”是匹配一到多个,“?”是非贪婪匹配,即最少字符匹配,否则会匹配到一些冗余信息。
整个表达式中class=\"e\"是区分页面一和页面二的关键哦~
(.+?):“()”是分组匹配,“.”是任意字符匹配,“+”是匹配一到多个,“?”是非贪婪匹配,即最少字符匹配,否则会匹配到一些冗余信息。
整个表达式中class=\"e\"是区分页面一和页面二的关键哦~
追问
(.+?) 好像会把 href 和 class 之间的属性也取出来了。我只要 href的属性值,咋整啊大哥
追答
我用Java测了一下确实不正确,不过在.Net中上面表达式应该是正确的,看来Java中和.Net的正则在内部处理上有些差别,呵呵~~
我把正则又改了一下,测试了一下,是正确的了,Java代码:
String str = "页面一页面二";
String regex = "(.+?)";
Matcher matcher = Pattern.compile(regex).matcher(str);
while(matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
}
/**
* 输出结果:
* eee.html
* 页面二
*/
上述正则可以直接取想要的值,有些取巧不够严谨,主要是因为你的字符串特征不够明显,[^\"]仅是对双引号进行过滤,如果没有双引号就不行了。如果class="e"这个特征是已知的并且确定的话,我建议这样写:
String regex = "(.+?)";
Matcher matcher = Pattern.compile(regex).matcher(str);
while (matcher.find()) {
if (“e”.equals(matcher.group(2)) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(3));
}
}
/**
* 输出结果:
* eee.html
* 页面二
*/
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询