简体   繁体   English

Java正则表达式匹配模式的前2行

[英]Java regex to match previous 2 lines of a pattern

something Line One
something Line two 
Last annotated on December 31, 2014

I don't care what is in between. Anything can go here. Any number of lines
I don't care what is in between. Anything can go here. Any number of lines

Something Line three
something line four
Last annotated on November 15, 2014

I want to write a regex to match 我想写一个正则表达式来匹配

something Line One
something Line two 
Last annotated on December 31, 2014

and

Something Line three
something line four
Last annotated on November 15, 2014

I have written below regex that works on Sublimetex, but same regex does not work on java. 我在下面写了可在Sublimetex上运行的正则表达式,但同一个正则表达式不适用于Java。

.*\n.*\nLast annotated on \w* \d{2}, \d{4}

Below is the java code that does not match the pattern. 以下是与模式不匹配的Java代码。

String regex = ".*\\n.*\\nLast annotated on \\w* \\d{2}, \\d{4}";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);

You need to use Pattern and Matcher classses with find function. 您需要将Pattern和Matcher类与find函数一起使用。

String s = "something Line One\n" + 
        "something Line two \n" + 
        "Last annotated on December 31, 2014\n" + 
        "\n" + 
        "I don't care what is in between. Anything can go here. Any number of lines\n" + 
        "I don't care what is in between. Anything can go here. Any number of lines\n" + 
        "\n" + 
        "Something Line three\n" + 
        "something line four\n" + 
        "Last annotated on November 15, 2014";
Matcher m = Pattern.compile(".*[\\r\\n]+.*[\\r\\n]+Last annotated on \\w* \\d{2}, \\d{4}").matcher(s);
while(m.find())
{
    System.out.println(m.group());
}

Output: 输出:

something Line One
something Line two 
Last annotated on December 31, 2014
Something Line three
something line four
Last annotated on November 15, 2014

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM