码:
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
Shyam and you
Lakshmi and you
Ram and you
Raju and you
Run Code Online (Sandbox Code Playgroud)
但我得到的输出是:
Shyam and you
Ram and you
Run Code Online (Sandbox Code Playgroud)
请指正.
您没有获得相邻匹配,因为您匹配".\\s"上一个模式中的下一个模式.所以,他们不会再次匹配.
你应该使用环视:
Pattern.compile("(?<=\\.\\s)(.*?and.*?)(?=\\.\\s)");
Run Code Online (Sandbox Code Playgroud)
环视是0长度的断言.它们不会消耗字符,而只是检查模式是否存在,无论是向前还是向后.
参考文献: