使用正则表达式提取长度为5且前后空格的单词。因此,以下所有单词都应符合我的模式。但似乎在匹配第一个单词后,空间被消耗掉,这使得第二个单词失败了。
为了说明,我应该/想要将打印输出为:
苹果橙松树宿舍
相反,我得到:
苹果松树
我该如何处理这个问题?
代码:
public static void main(String[] args) {
String myStr = " apple orange pines dorms ";
regexChecker("(\\s[A-Za-z]{5}\\s)", myStr);
}
public static void regexChecker(String regex, String strToCheckOn){
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(strToCheckOn);
while (m.find()){
if(m.group().length() != 0){
System.out.println(m.group(1));
}
System.out.println();
}
}
答案 0 :(得分:1)
您需要使用前瞻和后瞻,而不是在单词之前/之后消耗空格:
(?<=\\s|^)[A-Za-z]{5,}(?=\\s|$)
(?<=\\s|^)
看起来是断言我们在比赛前有线起点或空格(?=\\s|$)
是断言,断言我们在比赛结束后有线端或空格