使用java.util.regex.Pattern

时间:2013-04-24 10:46:49

标签: java regex

我不是程序员,所以我的水平在这个领域是新手。我必须创建一个正则表达式来检查两行。在这两条线A和B之间可以是一条,两条或更多条不同的线。

我一直在审查链接http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html,但我没有达到解决方案,但我认为我非常接近解决方案。

我正在测试表达式 ^(.*$) 这得到一整行。如果我两次写这个表达式,它会得到两行。所以看起来这个表达式与表达式的出现一样整齐。

但是,我想检查A和B之间未确定的行。我知道至少它会是一行 如果我写^(.*$){1,}它不起作用。

任何人都知道哪个可能是错误的?

感谢您的时间 安德烈

4 个答案:

答案 0 :(得分:1)

正则表达式中的DOT .匹配除换行符之外的任何字符。

你在这里寻找DOTALLs标志,使点匹配包括换行符在内的任何字符。因此,如果您想匹配文字A and B之间的所有行,请使用此正则表达式:

(?s)A.*?B

(?s)用于DOTALL,使.*?匹配所有字符,包括A和B之间的换行符。

?是让上面的正则表达式非贪婪。

阅读更多:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html

答案 1 :(得分:0)

为什么不使用Scanner?它可能与您想要的更相关:

Scanner sc = new ...
while (sc.nextLine().compareTo(strB)!=0) {
whatYouWantToDo
}

答案 2 :(得分:0)

您可以尝试搜索行终止符\r\n。根据文件的来源,您可能需要进行一些实验。 据我所知,你想匹配线条,中间至少有一条空行?试试^(.*)$\n{2,}^(.*)$

答案 3 :(得分:0)

如果你想找到两条相等的线,使用正则表达式:

Pattern pattern = Pattern.compile("^(?:.*\n)*(.*\n)(?:.*\n)*\\1");
// Skip some lines, find a line, skip some lines, find the first group `(...)`
Matcher m = pattern.matcher(text);
while (m.find()) {
    System.out.println("Double: " + m.group(1);
}

(?: ...)是非捕获组;也就是说,不能通过m.group(#)获得。

然而,这将找不到B行:“A \ nB \ nA \ nB \ n”。