我不是程序员,所以我的水平在这个领域是新手。我必须创建一个正则表达式来检查两行。在这两条线A和B之间可以是一条,两条或更多条不同的线。
我一直在审查链接http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html,但我没有达到解决方案,但我认为我非常接近解决方案。
我正在测试表达式
^(.*$)
这得到一整行。如果我两次写这个表达式,它会得到两行。所以看起来这个表达式与表达式的出现一样整齐。
但是,我想检查A和B之间未确定的行。我知道至少它会是一行
如果我写^(.*$){1,}
它不起作用。
任何人都知道哪个可能是错误的?
感谢您的时间 安德烈
答案 0 :(得分:1)
正则表达式中的DOT .
匹配除换行符之外的任何字符。
你在这里寻找DOTALL
或s
标志,使点匹配包括换行符在内的任何字符。因此,如果您想匹配文字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”。