ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [学习正则表达式用法]JAVA里合并多个不相关正则表达式在一起的代码例子[转载]

[学习正则表达式用法]JAVA里合并多个不相关正则表达式在一起的代码例子[转载]

原创 Linux操作系统 作者:Sur_Michael 时间:2009-07-16 21:43:51 0 删除 编辑

前几个月,做过一个从淘宝网上抓取数据的小程序.就是把每个页面里,宝贝的价格,已出售数,上架时间之类的数据保存起来,做一个分析.

这些我想要的数据都是在特定的标签里,于是我要做的就是把这些在特定标签里的数据抓取下来..

当时是用笨办法混过去了.. 今天看到老紫竹的一篇文章,正解决了我的问题,故特转一下.学习学习:P

===============================================================

转载地址:http://blog.csdn.net/java2000_net/archive/2009/07/16/4353980.aspx

事情的来源是,我要得到某个字符串里满足条件的一部分,但这个条件有多个可能性,比如 

(.+?)
 

之间的我需要 

(.+?)
 

之间的我也需要 

(.*?)  

这个之间的我也需要 

当然其它的可以是任何符合我要求的正则表达式,我的需求就是不想用多个正则分别匹配,然后组装,而是希望在一个正则里面实现。 

当然这几个正则之间肯定是或的关系,只要一段字符串满足任何一个正则,都可以。 经过【火龙果】的指导,我们终于实现了。 



看一个例子吧,这个是真实的例子,可以运行的。 

view plaincopy to clipboardprint?
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
import com.laozizhu.tools.PageService;  
/**  
 * JAVA里合并多个不相关正则表达式在一起的代码例子  
 *  
 * @author 老紫竹的家(laozizhu.com)  
 *  
 */  
public class Test {  
  private static Pattern pContentSOSO = Pattern  
  .compile(  
  "(?:(.*?) - 搜搜问问)|(?:
(.+?)
)|(?:
(.+?)
)|(?:
(.+?)
)|(?:
(.+?)
)",  
  Pattern.DOTALL);  
  public static void main(String[] args) {  
  String str = PageService.getPage("http://wenwen.soso.com/z/q143466873.htm");  
  Matcher m = pContentSOSO.matcher(str);  
  int count = m.groupCount();  
  while (m.find()) {  
  for (int i = 1; i <= count; i++) {  
  if (m.start(i) > -1) {  
  System.out.println(m.group(i).trim());  
  }  
  }  
  }  
  }  
}  



技术重点有2个 

1 每个正则(?:)包起来,代表这个是非捕获组 

2 不同正则之间用|分割(也就是或者的意思) 



其它的大家自己看代码吧!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17057040/viewspace-609373/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-03-13

  • 博文量
    1
  • 访问量
    5128