如何让 Java regex Matcher 匹配定界符

How to Let Java regex Matcher matches the delimeter

收到类似“5:无效数字:123***345”的错误消息

我想将消息拆分为 error_codeerror_text。在这种情况下,我想要 5Invalid number : 123***345.

但是,此代码将匹配器拆分为 5 : Invalid number123***345

这意味着正则表达式匹配最后一个 :.

Pattern PROCESSOR_ERROR_INFO_PATTERN_ONE = Pattern.compile("(.*):(.*)");

Matcher matcherOne = PROCESSOR_ERROR_INFO_PATTERN_ONE.matcher(error_message);

if (matcherOne.matches()) {
      processorErrorCode = matcherOne.group(1).trim();
      processorErrorMessage = matcherOne.group(2).trim();
}

顺便说一句,不能保证 error_code 只是数字。所以我不能使用像 (\d+):(.*) 这样的正则表达式 有没有一种方法可以控制匹配第一个 : 而不是默认的最后一个 :?

嗯,你可以只使用 split(String, int)),限制为 2。那将是最简单的。但是,如果你想坚持你的解决方案,你可以匹配第一个 : 而不是最后一个 : 通过改变量词的贪婪度(.*?)或匹配除了 :(如 ([^:]*):(.*))。

您可以通过添加 ? 使第一个 * 量词 惰性 ,因此第一组将尽可能小:

Pattern.compile("(.*?):(.*)")