java - 正则表达式静态组问题

标签 java regex

我有几个粗略的字符串:

[一些带有一位或两位数字的数字] [一些文本] [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/

相关文章:

java - 从 BufferedImage 获取像素数据

java - Activity 布局未显示

java - 如何在java中查找和替换某些字符串模式

python - 从 re.search 循环替换数据框列值

c# - 在.net中使用正则表达式匹配两个单词的正确模式

java - 如何使用 java(spring) 将 json 对象消息生成到 kafka 主题中?

java - 固定大小的长数组的运行时间

java - JUnit 断言失败是可怕的。可以做什么?

用于模式研究的 Python 正则表达式

php - 我需要帮助修改 PHP markdown 的正则表达式