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

<div class=/"question_con/">(.+?)</div>

之间的我需要

<div class=/"pump_ask_con/">(.+?)</div>

之间的我也需要

<title>(.*?) </title>

这个之间的我也需要

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

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


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

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());  
}  
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 不同正则之间用|分割(也就是或者的意思)

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