gpt4 book ai didi

Java Matcher.find $ 在单行模式下匹配换行符

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:39 24 4
gpt4 key购买 nike

我正在尝试以下模式:

Pattern p = Pattern.compile("^(\\d+)$");

奇怪的是,恕我直言:

p.matcher("123\n").find() == true;
p.matcher("123\n").lookingAt() == true; // also weird
p.matcher("123\n\n").find() == false; // ok
p.matcher("123\na").find() == false; // also ok
p.matcher("123\n").matches() == false; // ok to me

引用 Javadocs 中“多行标志”的文档:

Enables multiline mode.In multiline mode the expressions ^ and $ match just after or just before, respectively, a line terminator or the end of the input sequence. By default these expressions only match at the beginning and the end of the entire input sequence.

嗯,对我来说 '\n' (即新行字符)不是输入序列的结尾,因此 '$' 应该只在多行模式下匹配它。

我是否遗漏了什么,或者这是 Java 中的错误。另外,如果您在 Javascript 中尝试相同的模式并测试字符串,您将看到 Javascript 的行为正常:

/^(\d+)$/.test("123\n") == false
/^(\d+)$/.exec("123\n") == null

(顺便说一下,我在 RHEL 7.2 上使用 Java 8)

谢谢!

(编辑:我很久以前就应该这样做:我已经为此向 Oracle 提交了错误请求。我们将看看会发生什么。)

最佳答案

EOL 取决于操作系统。

尝试将测试模式更改为“123”+System.lineSeparator()

关于Java Matcher.find $ 在单行模式下匹配换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54408850/

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