给出错误消息,例如" 5:无效号码:123 *** 345"
我想将邮件拆分为error_code
和error_text
。在这种情况下,我想要5
和Invalid number : 123***345
。
但是,此代码将匹配器拆分为
5 : Invalid number
和123***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+):(.*)
一样使用正则表达式
有没有办法可以控制匹配第一个:
而不是默认的最后:
?
答案 0 :(得分:2)
嗯,你可以使用限制为2的split(String, int)
)。这将是最容易的。但是,如果您想坚持使用解决方案,则可以通过更改量词的贪婪(:
)或匹配除{{{{{}之外的所有内容来匹配第一个:
而不是最后一个.*?
1}}(如:
)。
答案 1 :(得分:2)
您可以通过添加*
来制作第一个?
量词 lazy ,这样第一组就会尽可能小:
Pattern.compile("(.*?):(.*)")