1

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

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

我正在测试表达式 ^(.*$) ,这得到了一整行。如果我把这个表达式写两次,它会得到两行。因此,该表达式似乎与表达式的出现一样整行。

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

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

谢谢你的时间安德烈斯

4

4 回答 4

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

于 2013-04-24T10:56:45.803 回答
0

你为什么不使用扫描仪?它可能与您想要的更相关:

Scanner sc = new ...
while (sc.nextLine().compareTo(strB)!=0) {
whatYouWantToDo
}
于 2013-04-24T10:52:26.130 回答
0

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

于 2013-04-24T10:59:28.017 回答
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(#).

但是,这不会在“A\nB\nA\nB\n”中找到 B 行。

于 2013-04-24T11:00:17.533 回答