gpt4 book ai didi

java - 正则表达式在测试工具中有效,但在生产环境中不匹配

转载 作者:行者123 更新时间:2023-12-01 10:46:58 26 4
gpt4 key购买 nike

我已经为 Q\|\d\|\^(.+?) 下面的行编写了一个正则表达式它在测试环境中有效,但在真实环境中无效。

--lines I'm trying to match

String line="XYZ Q|1|^123456<CR> bla bla"

String line="ETC Q|1|^ALL<CR> bla bla"

String line="ABCQ|1|^ALL<CR>123etc"

Pattern queryRegex=Pattern.compile("Q\\\\|\\\\d\\\\|(.+?)<CR>")

Matcher queryMatcher=queryRegex.matcher(line);
queryMatcher.find() returns false ?

queryMatcher.matches()queryMatcher.find() 返回 false,但它适用于测试环境。

有什么想法吗?

编辑:您可以在测试环境中看到它是如何工作的。右上角有一个复制按钮,它可以将您的模式复制为java代码。

enter image description here

最佳答案

您的原始模式存在问题。当你想在Java中转义一个特殊的正则表达式字符时,你需要转义一次,但实际上你需要两个反斜杠(\\)。第一个反斜杠转义了第二个反斜杠。您实际上使用了四个反斜杠,这就是您没有匹配任何内容的原因。尝试以下代码:

String line = "XYZ Q|1|^123456<CR>";
Pattern queryRegex=Pattern.compile("Q\\|\\d\\|(.+?)<CR>");

Matcher queryMatcher=queryRegex.matcher(line);
if (queryMatcher.find()) {
System.out.println("Group 0: " + queryMatcher.group(0));
System.out.println("Group 1: " + queryMatcher.group(1));
}

输出:

Group 0: Q|1|^123456<CR>
Group 1: ^123456

至于为什么它在你的测试环境中工作(你从来没有提到这是在哪里),我只能猜测,额外的反斜杠可能是在剪切并粘贴到你的IDE时引入的。您的 IDE 正在为您转义反斜杠,但不幸的是它本身有点太聪明了。

关于java - 正则表达式在测试工具中有效,但在生产环境中不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34127353/

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