如何让Java正则表达式匹配分隔符

时间:2017-05-16 23:23:09

标签: java regex matcher

给出错误消息,例如" 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+):(.*)一样使用正则表达式 有没有办法可以控制匹配第一个:而不是默认的最后:

2 个答案:

答案 0 :(得分:2)

嗯,你可以使用限制为2的split(String, int))。这将是最容易的。但是,如果您想坚持使用解决方案,则可以通过更改量词的贪婪(:)或匹配除{{{{{}之外的所有内容来匹配第一个:而不是最后一个.*? 1}}(如:)。

答案 1 :(得分:2)

您可以通过添加*来制作第一个?量词 lazy ,这样第一组就会尽可能小:

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