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

时间:2011-11-20 14:14:14

标签: java regex

我怎样才能获得

Text t;
Graph g;

// Co
Text t;
Graph g;
// Co

// Co\r?\n(.*)\r?\n// Co

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

1 个答案:

答案 0 :(得分:5)

默认情况下,.会匹配除换行符(\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方法,除非你有一个正则表达式.有时意味着一件事,有时候是另一件事。)

编辑添加:似乎很有可能 - 但您必须根据自己的使用情况自行确定,需要使用非贪婪量化,.*?,而不是贪心量化,.*