正则表达式没有给出预期的输出

时间:2013-08-26 18:20:22

标签: java regex

代码:

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

请纠正我。

2 个答案:

答案 0 :(得分:6)

您没有获得相邻的匹配,因为您匹配上一个模式中下一个模式的".\\s"。所以,它们不会再次匹配。

你应该使用环视:

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

环视是0长度断言。他们不会消耗字符,只是检查是否存在模式,无论是向前还是向后。


<强>参考文献:

答案 1 :(得分:0)

我不是regexpert,但看起来你的模式与两个匹配。当每个句子之间只有一个。