【发布时间】:2016-09-11 22:35:39
【问题描述】:
我想从包含在某些标签中的字符串中提取所有子字符串。例如,如果我有一个将一些子字符串包含在“*”标签中的输入字符串:
I contain two terms to extract: *first term* and *second term*
我想要得到的是两个子字符串“first term”和“second term”。 我尝试使用以下代码:
List<String> matches = new ArrayList<>();
Matcher m = Pattern.compile(".*\\*(.*)\\*.*").matcher(inputString);
while(m.find()){
matches.add(m.group(1));
}
但这给了我不正确的结果。我阅读了有关 group 方法的 API 文档,但老实说,我不太明白它的含义以及它是如何工作的。如果有人能告诉我在这里收集所有想要的子字符串的最佳方法是什么,我将不胜感激。
谢谢!
【问题讨论】:
-
使用
\\*(.*?)\\*,即不贪心。 -
“贪婪”是什么意思?谢谢
-
“贪婪”的意思是如果有不止一种方式来获得匹配,它会选择字符数最多的匹配。如果你的正则表达式是
a.*b,而你的输入字符串是a1111b...a2222b,这将匹配整个字符串,因为它会为.*选择最大的匹配。通过添加问号a.*?b,您可以告诉它选择字符数最少的匹配项。所以这将匹配a1111b。