RegEx - 多行输入问题

And*_*s_D 4 java regex

我有一个包含多行内容的String,并希望选择一个多行区域,最好使用正则表达式(因为我现在正试图理解Java RegEx).

考虑输入如下:

Line 1
abc START def
Line 2
Line 3
gh END jklm
Line 4
Run Code Online (Sandbox Code Playgroud)

假设START并且END是区域的唯一和开始/结束标记,我想创建一个模式/匹配器来获得结果:

 def
Line 2
Line 3
gh 
Run Code Online (Sandbox Code Playgroud)

我目前的尝试是

Pattern p = Pattern.compile("START(.*)END");
Matcher m = p.matcher(input);
if (m.find())
  System.out.println(m.group(1));
Run Code Online (Sandbox Code Playgroud)

但结果是

gh
Run Code Online (Sandbox Code Playgroud)

所以m.start()似乎指向包含'结束标记'的行的开头.我试图添加Pattern.MULTILINE到编译调用但是(单独)没有改变任何东西.

我的错误在哪里?

Mat*_*hen 8

你想要Pattern.DOTALL,所以.匹配换行符. MULTILINE解决不同的问题,^$锚.

Pattern p = Pattern.compile("START(.*)END", Pattern.DOTALL);
Run Code Online (Sandbox Code Playgroud)