在正则表达式期间消耗的空间

时间:2016-06-02 19:59:54

标签: java regex

使用正则表达式提取长度为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();
    }
}

1 个答案:

答案 0 :(得分:1)

您需要使用前瞻和后瞻,而不是在单词之前/之后消耗空格:

(?<=\\s|^)[A-Za-z]{5,}(?=\\s|$)

RegEx Demo

  • (?<=\\s|^)看起来是断言我们在比赛前有线起点或空格
  • (?=\\s|$)是断言,断言我们在比赛结束后有线端或空格