我有几个粗略的字符串:
[一些带有一位或两位数字的数字] [一些文本] [ABC 或 BC 的文本] [一些文本]
String test = "12testABCtest";
Pattern p = Pattern.compile("([\\d]{1,2})([\\w]*)(ABC|BC)([\\w]*)");
但它总是给我“第三组中的 BC 而不是 ABC。(因为它包括前一组中的 A)
你知道怎么做吗?
谢谢你,
最佳答案
可以让文本非贪婪匹配:
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
基本上:不情愿的量词会尽可能少地匹配,这与默认的贪婪量词会尽可能多地匹配相反。您可以通过将 ?
附加到另一个量词来获得一个不情愿的量词。
关于java - 正则表达式静态组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6519150/