Java正则表达式replaceAll多行

发布于 2024-10-02 00:24:30 字数 389 浏览 3 评论 0原文

我对多行字符串的replaceAll有问题:

String regex = "\\s*/\\*.*\\*/";
String testWorks = " /** this should be replaced **/ just text";
String testIllegal = " /** this should be replaced \n **/ just text";

testWorks.replaceAll(regex, "x"); 
testIllegal.replaceAll(regex, "x"); 

上面的内容适用于testWorks,但不适用于testIllegal!? 这是为什么?我该如何克服这个问题?我需要替换诸如跨多行的注释 /* ... */ 之类的内容。

I have a problem with the replaceAll for a multiline string:

String regex = "\\s*/\\*.*\\*/";
String testWorks = " /** this should be replaced **/ just text";
String testIllegal = " /** this should be replaced \n **/ just text";

testWorks.replaceAll(regex, "x"); 
testIllegal.replaceAll(regex, "x"); 

The above works for testWorks, but not for testIllegal!?
Why is that and how can I overcome this? I need to replace something like a comment /* ... */ that spans multiple lines.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梅窗月明清似水 2024-10-09 00:24:30

您需要使用 Pattern.DOTALL 标志来表示点应该与换行符匹配。例如

Pattern.compile(regex, Pattern.DOTALL).matcher(testIllegal).replaceAll("x")

,或者使用 (?s) 在模式中指定标志,例如

String regex = "(?s)\\s*/\\*.*\\*/";

You need to use the Pattern.DOTALL flag to say that the dot should match newlines. e.g.

Pattern.compile(regex, Pattern.DOTALL).matcher(testIllegal).replaceAll("x")

or alternatively specify the flag in the pattern using (?s) e.g.

String regex = "(?s)\\s*/\\*.*\\*/";
菊凝晚露 2024-10-09 00:24:30

Pattern.DOTALL 添加到编译中,或将 (?s) 添加到模式中。

这会起作用

String regex = "(?s)\\s*/\\*.*\\*/";

参见
使用正则表达式匹配多行文本

Add Pattern.DOTALL to the compile, or (?s) to the pattern.

This would work

String regex = "(?s)\\s*/\\*.*\\*/";

See
Match multiline text using regular expression

怎樣才叫好 2024-10-09 00:24:30

元字符 . 匹配除换行符之外的任何字符。这就是为什么您的正则表达式不适用于多行情况。

要解决此问题,请将 . 替换为与任何字符(包括换行符)匹配的 [\d\D]

实际代码

The meta character . matches any character other than newline. That is why your regex does not work for multi line case.

To fix this replace . with [\d\D] that matches any character including newline.

Code In Action

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文