我有粗略的几个字符串:
[带一个或两个数字的某个数字] [某些文字] [ABC或BC的文字] [某些文字]
String test = "12testABCtest";
Pattern p = Pattern.compile("([\\d]{1,2})([\\w]*)(ABC|BC)([\\w]*)");
但是它总是让我“在第3组而不是ABC。”(因为它包括前一组中的A)
你知道怎么做吗?
谢谢,
答案 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
基本上:不情愿的量词将尽可能少地匹配,而不是尽可能匹配的默认贪心量词。通过将?
附加到另一个量词,您会得到一个不情愿的量词。