使用正则表达式删除java中分隔符之间的文本

时间:2012-11-08 07:08:44

标签: java regex

您好我正在尝试删除多行中/**/之间的所有代码。到目前为止我有这个:

Scanner scan = new Scanner(inputFile).useDelimiter("\\Z");
String file = scan.next();
String next = file.replaceAll("((/\\*)(\\s|\\S)*(\\*/))", "");

但是当我尝试使用包含/**/多个案例的输入文件来运行它时,它会删除它们之间的所有内容。例如,在此输入中

/* first comment */
a = b;
//test
if a = c;
// whatever
if a = d;
/* this
is a

test
*/

/* another */

它将删除文件末尾的第一个/*和最后一个*/之间的所有内容。基本上用空格替换整个文本。如何将其限制为/****/的第一种情况?

1 个答案:

答案 0 :(得分:2)

您正在使用greedy量词。您的(\\s|\\S)*将匹配所有内容,直到找到最后一个*/,直到可以成功匹配完整模式的结果。

您可以在?之后添加*,让量词不愿意。

"((/\\*)(\\s|\\S)*?(\\*/))"

此外,您可以像这样简化正则表达式: -

String next = file.replaceAll("(?s)/\\*.*?\\*/", "");

(?s) - >用于SingleLine匹配。它是Pattern.DOTALL中使用String.replaceAll()的替代方法。因此,您的dot(.)会包含所有内容,包括换行符。而且你不需要(\\s|\\S)