gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:30:26 25 4
gpt4 key购买 nike

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

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 */

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

最佳答案

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

您可以通过在 * 之后添加 ? 来使量词不情愿。

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

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

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

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

关于java - 使用正则表达式删除java中分隔符之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13284170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com