前几个月,做过一个从淘宝网上抓取数据的小程序.就是把每个页面里,宝贝的价格,已出售数,上架时间之类的数据保存起来,做一个分析.
这些我想要的数据都是在特定的标签里,于是我要做的就是把这些在特定标签里的数据抓取下来..
当时是用笨办法混过去了.. 今天看到老紫竹的一篇文章,正解决了我的问题,故特转一下.学习学习: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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17057040/viewspace-609373/