java正则表达式中,matches和find的效率问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java正则表达式中,matches和find的效率问题相关的知识,希望对你有一定的参考价值。

比如我要查找输入字符串中是否存在success

String input = "adsfadssuccesfadsf";
// find
Pattern pattern = Pattern.compile("(?is)success");
Matcher matcher = pattern.matcher(input);
matcher.find();
// matches
Pattern.matches("(?is).*success.*", input);
此时(没有捕获组),matches 和 find 哪 个效率更高?匹配原理是不是相同?

你可以看下源码,匹配原理是一样的,没什么大区别。效率应该是一样的。匹配原则代码块如下。

 this.hitEnd = false;
        this.requireEnd = false;
        from        = from < 0 ? 0 : from;
        this.first  = from;
        this.oldLast = oldLast < 0 ? from : oldLast;
        for (int i = 0; i < groups.length; i++)
            groups[i] = -1;
        acceptMode = anchor;
        boolean result = parentPattern.matchRoot.match(this, from, text);
        if (!result)
            this.first = -1;
        this.oldLast = this.last;
        return result;追问

我两个里面的正则表达式是不一样的

参考技术A 如果仅仅是要判断是否存在,那是find好。 参考技术B 第一个,第一个表达式在代码里已经编译了Pattern.compile("(?is)success");效率高追问

可是我之匹配了一次,而且我也只需要匹配一次呀

js正则函数中test和match的区别

test是RegExp的方法,参数是字符串,返回值是boolean类型。

match是String的方法,参数是正则表达式,返回值是数组。

 

1  <script type="text/javascript">
2        var str="javascript is good,java";
3     console.log(str.match(/java/gi)); //返回时数组
4    </script>

技术分享

   var str="javascript is good,java";
   var reg = /java/gi;
    console.log(reg.test(str)); //返回时数组
    

技术分享

 

以上是关于java正则表达式中,matches和find的效率问题的主要内容,如果未能解决你的问题,请参考以下文章

弄懂 Java 正则表达式中的量词贪婪勉强独占和 String 的 matches 方法的底层个人感觉非常值得学习

正则表达式

Java中正则Matcher类的matches,lookAt和find的区别

python正则表达式match,search,find的使用方法

Java中正则Matcher类的matches()lookAt()和find()的差别

JAVA正则表达式怎么匹配所有符合要求的子字符串