java正则表达式抽取html数据【macher.group(1).trim()】


由于项目需求,需要抓取一些网站数据,于是这两天研究了下java正则表达式和java模拟http请求。 

一直以来,看到正则表达式就头疼,认为很难看懂,需要就从网上搜,但是这次需要抽取的是html数据,样式多样,靠不住百度,只能靠自己了。 

介绍下正则表达式学习历程: 
首先是在百度上搜了些简单的入门文章,比如[a-zA-Z]、.*等的意思,然后主要是通过java API文档介绍进行学习,其实里面都比较详细,主要是两个类Pattern和Matcher, 
在包java.util.regex下,使用其实很简单,主要步骤: 
Pattern p = Pattern.compile("a*b"); 
Matcher m = p.matcher("aaaaab"); 
boolean b = m.matches(); 

在学习过程中主要对组有点难懂,查了好久,终于有个文章让我恍然大悟, 
我的理解是,组的主要作用是方便提取数据,例如一个正则表达式"(.*?)", 
里面包含两个组,第一个就是整个表达式,第二个则是里的内容,就是(.*?)的内容,这样如果m.group(0)提取的内容就是符合整个表达式的内容,包括
m.group(1)则是里面的内容。 java正则表达式中(a)表示组 

下面是我写的一个抓取百度上查看某只股票信息的程序。 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PersonalData
{
public static void main(String[] args) throws Exception{
      URL url= new URL("http://www.baidu.com/s?wd=000897");
      URLConnection urlConnection=   url.openConnection();
      BufferedReader br=new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
      String str="";
      StringBuffer content=new StringBuffer();
      while((str=br.readLine())!=null){
       content.append(str);
      }
      br.close();
    String regx1="(.*?)(.*?)(.*?)(.*?)开盘: (.*?)(.*?)(.*?)(.*?)(.*?)";
      Pattern p= Pattern.compile(regx1);
      String text=content.toString();
      Matcher  macher =p.matcher(text);
     while(macher.find()){
      System.out.println("现价:"+macher.group(1).trim());
      System.out.println("幅度:"+macher.group(3).trim());
      System.out.println("开盘价:"+macher.group(6).trim());
      System.out.println("最高:"+macher.group(8).trim());
      System.out.println("最低:"+macher.group(11).trim());
     }
}
}

代码简单,没进行封装。(注:百度上搜索看到的股票信息不是即时的,有一定时间的延迟)

你可能感兴趣的:(JAVA)