如何让 Java regex Matcher 匹配定界符
How to Let Java regex Matcher matches the delimeter
收到类似“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+):(.*)
这样的正则表达式
有没有一种方法可以控制匹配第一个 :
而不是默认的最后一个 :
?
嗯,你可以只使用 split(String, int)
),限制为 2。那将是最简单的。但是,如果你想坚持你的解决方案,你可以匹配第一个 :
而不是最后一个 :
通过改变量词的贪婪度(.*?
)或匹配除了 :
(如 ([^:]*):(.*)
)。
您可以通过添加 ?
使第一个 *
量词 惰性 ,因此第一组将尽可能小:
Pattern.compile("(.*?):(.*)")
收到类似“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+):(.*)
这样的正则表达式
有没有一种方法可以控制匹配第一个 :
而不是默认的最后一个 :
?
嗯,你可以只使用 split(String, int)
),限制为 2。那将是最简单的。但是,如果你想坚持你的解决方案,你可以匹配第一个 :
而不是最后一个 :
通过改变量词的贪婪度(.*?
)或匹配除了 :
(如 ([^:]*):(.*)
)。
您可以通过添加 ?
使第一个 *
量词 惰性 ,因此第一组将尽可能小:
Pattern.compile("(.*?):(.*)")