正则表达式静态组问题

时间:2011-06-29 10:27:58

标签: java regex

我有粗略的几个字符串:

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

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

但是它总是让我“在第3组而不是ABC。”(因为它包括前一组中的A)

你知道怎么做吗?

谢谢,

1 个答案:

答案 0 :(得分:8)

您可以使文字与非贪婪匹配:

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

<强>参考:

Reluctant quantifiers
-----------------------------
X??     X, once or not at all
X*?     X, zero or more times
X+?     X, one or more times

来源: Pattern javadoc: Reluctant quantifiers

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