Java正则表达三
在测试中发现之前构造的正则表达式 总是在一次匹配中匹配两个<li>标签以及两标签中间的内容.现在经过分析发现了问题.
上一篇中构造的正则表达式String regex = "<li[^>n].*>[\\s\\S]+?</li>";经测试此正则表达式的前一部分 "<li[^>n].*>" 即可匹配一个单行闭合的<li>标签."<li" 匹配"<li"开头的标签"[^>n]"匹配一个非'n'的字符.防止匹配到<link>标签.".*"匹配任意字符直到这一行结束.
整个表达式和本来的想法不一样,于是重新构造正则表达式.匹配单个闭合(包括单行 多行)的<li>标签.
重构后的表达式为: String regex = "<li[^n][\\s\\S]+?</li>";
1 import java.io.IOException; 2 import java.io.InputStream; 3 import java.util.regex.Matcher; 4 import java.util.regex.Pattern; 5 6 public class Test { 7 8 public static void main(String[] args) throws IOException { 9 10 String webSource ; 11 String regex = "<li[^n][\\s\\S]+?</li>"; 12 InputStream inputStream ; 13 inputStream = new MyClass().getWebPage("http://news.baidu.com/"); 14 webSource = new MyClass().inputStream2String(inputStream); 15 Pattern pattern = Pattern.compile(regex); 16 Matcher matcher = pattern.matcher(webSource); 17 while(matcher.find()){ 18 System.out.println(1); 19 System.out.println(MyClass.String2UTF8(matcher.group(0))); 20 21 } 22 23 } 24 25 }
运行效果: