我怎样才能得到
Text t;
Graph g;
来自
// Co
Text t;
Graph g;
// Co
?
// Co\r?\n(.*)\r?\n// Co
只有一行时有效,但多行时无效。
最佳答案
默认情况下,.
匹配除换行符 (\n
) 之外的任何字符,但您可以使用 the Pattern.DOTALL
flag使其也匹配换行符。因此,例如,而不是这样:
final Pattern pat = Pattern.compile("// Co\r?\n(.*)\r?\n// Co");
你会使用这个:
final Pattern pat = Pattern.compile("// Co\r?\n(.*)\r?\n// Co", Pattern.DOTALL);
同样,您可以使用以下任一样式在正则表达式本身内设置 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");
它可以让您准确控制正则表达式的哪一部分接受 .
的换行符。 (但我会坚持使用 DOTALL
方法,除非你有一个正则表达式,其中 .
有时表示一件事,有时表示另一件事。)
编辑添加:似乎很可能 - 但您必须根据您的用例自行确定 - 您需要使用非贪婪 量化,.*?
,而不是贪婪量化,.*
.
关于java - 正则表达式 - 获取两个注释之间的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8202081/