在Java中重用Pattern实例

时间:2014-04-14 03:54:18

标签: java regex

我的问题是,与Pattern.compile( )一起使用时,是否可以使用String.matches( )重复使用已编译的模式?

因为,在它说的文档中,

  

此类定义了matches方法,以方便a   正则表达式只使用一次。这个方法编译一个   表达式并将输入序列与单个匹配   调用。声明

boolean b = Pattern.matches("a*b", "aaaaab"); 
     

相当于   上面有三个陈述,但是对于重复的匹配,它更少   高效,因为它不允许重用已编译的模式。

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

它只表示当你使用Pattern.matches时效率会降低。我对此部分感到困惑:

  

调用str.matches(regex)形式的此方法会产生   与表达式

完全相同的结果
Pattern.matches(regex, str)

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#matches(java.lang.String)

所以我不确定String.matches是否使用Pattern.matches,因此我无法再次重用已编译的模式。我实际上计划将编译的模式设置为常量(用于优化目的)

1 个答案:

答案 0 :(得分:6)

Pattern.matches()方法是一种静态方法,因此如果要重用已编译的模式,则无法使用它。编译模式是Pattern类的实例。 Pattern.matches()每次使用时都会编译你的正则表达式。

您可以通过存储Pattern类的实例来重用已编译的模式,例如:

Pattern pattern = Pattern.compile("^[a-z]+$", Pattern.CASE_INSENSITIVE); // you can store this instance

每次你想使用它时,你都可以获得这个模式的匹配器

Matcher m = pattern.matcher("Testing");