正则表达式 - 在两条评论之间获取代码

OnT*_*Fly 2 java regex

我怎样才能得到

Text t;
Graph g;
Run Code Online (Sandbox Code Playgroud)

// Co
Text t;
Graph g;
// Co
Run Code Online (Sandbox Code Playgroud)

// Co\r?\n(.*)\r?\n// Co
Run Code Online (Sandbox Code Playgroud)

当有一行时有效,但不适用于多行.

rua*_*akh 5

默认情况下,.匹配除换行符(\n)之外的任何字符,但您也可以使用Pattern.DOTALL标志使其与换行符匹配.所以,例如,而不是这个:

final Pattern pat = Pattern.compile("// Co\r?\n(.*)\r?\n// Co");
Run Code Online (Sandbox Code Playgroud)

你会用这个:

final Pattern pat = Pattern.compile("// Co\r?\n(.*)\r?\n// Co", Pattern.DOTALL);
Run Code Online (Sandbox Code Playgroud)

同样,您可以s使用以下任一样式在正则表达式本身内设置标志:

final Pattern pat = Pattern.compile("// Co\r?\n((?s).*)\r?\n// Co");
final Pattern pat = Pattern.compile("// Co\r?\n(?s:(.*))\r?\n// Co");
Run Code Online (Sandbox Code Playgroud)

它可以让你准确控制正则表达式的哪一部分接受换行符..(但我坚持使用这种DOTALL方法,除非你有一个正则表达式,.有时候意味着一件事,有时候是另一件事.)

编辑添加:似乎很可能 - 但你必须根据你的用例自己确定这个,你需要使用非贪婪的量化.*?,而不是贪婪的量化.*.