2013-08-26 87 views
4

代碼:正則表達式沒有給出預期輸出

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Regex { 
public static void main(String[] args) { 
    String data = ". Shyam and you. Lakshmi and you. Ram and you. Raju and you. "; 
    Pattern pattern = Pattern.compile("\\.\\s(.*?and.*?)\\.\\s"); 
    Matcher matcher = pattern.matcher(data); 
    while (matcher.find()) { 
     System.out.println(matcher.group(1)); 
    } 

} 
} 

預期輸出:

Shyam and you 
Lakshmi and you 
Ram and you 
Raju and you 

,但我得到的輸出是:

Shyam and you 
Ram and you 

請指正。

回答

6

由於您在上一個模式中匹配下一個模式的".\\s",因此您沒有進行相鄰匹配。所以,他們不會再次匹配。

您應該使用查找變通:

Pattern.compile("(?<=\\.\\s)(.*?and.*?)(?=\\.\\s)"); 

查找變通是長度爲0的斷言。他們不會消耗角色,而只是檢查模式是否存在,無論是前進還是後退。


參考文獻:

+0

這就像一個魅力工作!謝謝:D –

+0

@NJay。別客氣 :) –

0

我不是regexpert,但它看起來像你的模式是匹配了兩個,只有一個在每個句子之間時。 。