正则表达式静态组问题

RoD*_*RoD 1 java regex

我有粗糙的几个字符串:

[带一个或两个数字的某个数字] [某些文字] [ABC或BC的文字] [某些文字]

String test = "12testABCtest";
Pattern p = Pattern.compile("([\\d]{1,2})([\\w]*)(ABC|BC)([\\w]*)");
Run Code Online (Sandbox Code Playgroud)

但是它总是让我"在第3组中取代BC而不是ABC."因为它包括前一组中的A

你知道怎么做吗?

谢谢,

Sea*_*oyd 8

您可以使文本匹配非贪婪:

Pattern p = Pattern.compile("([\\d]{1,2})([\\w]*?)(A?BC)([\\w]*)");
Run Code Online (Sandbox Code Playgroud)

参考:

Reluctant quantifiers
-----------------------------
X??     X, once or not at all
X*?     X, zero or more times
X+?     X, one or more times
Run Code Online (Sandbox Code Playgroud)

资料来源: Patternjavadoc:不情愿的量词

基本上:不情愿的量词将尽可能少地匹配,而不是尽可能匹配的默认贪心量词.通过将a附加?到另一个量词,你会得到一个不情愿的量词.