分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
事情的来源是,我要得到某个字符串里满足条件的一部分,但这个条件有多个可能性,比如
<div class=/"question_con/">(.+?)</div>
之间的我需要
<div class=/"pump_ask_con/">(.+?)</div>
之间的我也需要
<title>(.*?) </title>
这个之间的我也需要
扫描二维码关注公众号,回复:
5005451 查看本文章
当然其它的可以是任何符合我要求的正则表达式,我的需求就是不想用多个正则分别匹配,然后组装,而是希望在一个正则里面实现。
当然这几个正则之间肯定是或的关系,只要一段字符串满足任何一个正则,都可以。 经过【火龙果】的指导,我们终于实现了。
看一个例子吧,这个是真实的例子,可以运行的。
- 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(
- "(?:<title>(.*?) - 搜搜问问</title>)|(?:<div class=/"question_con/">(.+?)</div>)|(?:<div class=/"pump_ask_con/">(.+?)</div>)|(?:<div class=/"answer_con/">(.+?)</div>)|(?:<div class=/"pump_con/">(.+?)</div>)",
- 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 不同正则之间用|分割(也就是或者的意思)
其它的大家自己看代码吧!