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的使用方法