我有粗糙的几个字符串:
[带一个或两个数字的某个数字] [某些文字] [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
你知道怎么做吗?
谢谢,
您可以使文本匹配非贪婪:
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附加?到另一个量词,你会得到一个不情愿的量词.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |