java regex不情愿量词给贪心量词

时间:2015-11-01 05:30:15

标签: java regex

我正在尝试java正则表达式量词

    Pattern p = Pattern.compile("^s(.*?)n$");
    Matcher m = p.matcher("sensation");
    if(m.matches()){
        System.out.println("dude how is this even possible");
        System.out.print(m.group() + m.start()+m.end()+"\n");



    }else {
        System.out.println("sorry dude someting wrong");
    }

因为它是重新定量的,所以应该给出以下结果 森 sation

但是我感觉到它出错的地方或我错过了什么

1 个答案:

答案 0 :(得分:2)

您已经告诉程序两次您的模式需要匹配整个字符串。这就是为什么它只能与"sen"部分匹配,即使您使用不情愿的限定符也是如此。

(1)模式末尾的$匹配字符串的结尾;它不会让您匹配"sen",因为"sen"后面没有字符串的结尾。

(2)您正在使用m.matches(),只有在整个字符串匹配时才会返回true。请参阅matches的定义。

删除$并将matches()更改为find()