gpt4 book ai didi

Java 正则表达式 : Normalize all escaped or non-escaped newlines - why does this fail?

转载 作者:行者123 更新时间:2023-11-29 07:46:57 24 4
gpt4 key购买 nike

我正在尝试将字符串中的任何换行符或转义换行符规范化为转义的 unix 换行符。我不明白为什么这不起作用:

Pattern EOL = Pattern.compile("(\\\\r)?\\\\n|\r?\n");
final String escapedEOL = "\\\\n";

System.out.println(EOL.matcher("asdf\njkl;").replaceAll(escapedEOL));
System.out.println(EOL.matcher("asdf\n").replaceAll(escapedEOL));
System.out.println(EOL.matcher("asdf\r\njkl;").replaceAll(escapedEOL));
System.out.println(EOL.matcher("asdf\r\n").replaceAll(escapedEOL));
System.out.println(EOL.matcher("asdf\\r\\njkl;").replaceAll(escapedEOL));
System.out.println(EOL.matcher("asdf\\r\\n").replaceAll(escapedEOL));

结果:

asdf\njkl;
asdf

asdf\njkl;
asdf\n
asdf\njkl;
asdf\n
Done

任何人都可以阐明这一点吗?我意识到我可以将其分成两个电话,但现在我很好奇......

编辑:看来我应该更努力地寻找 similar problems .看起来在 Java 7 中应该避免使用带组的量词。

Pattern EOL = Pattern.compile("\\\\n|\\\\r\\\\n|\r?\n")

也适用。

最佳答案

我不确定为什么,但更改正则表达式中的顺序似乎可以如您所愿,所以更改

Pattern EOL = Pattern.compile("(\\\\r)?\\\\n|\r?\n");

Pattern EOL = Pattern.compile("\r?\n|(\\\\r)?\\\\n");

Demo

无论如何,它看起来更像是错误而不是期望的行为,并且在 Java 8 中进行了更改,因此您的原始正则表达式也会产生

asdf\njkl;
asdf\n
asdf\njkl;
asdf\n
asdf\njkl;
asdf\n

关于Java 正则表达式 : Normalize all escaped or non-escaped newlines - why does this fail?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24943739/

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