我的问题是,与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
,因此我无法再次重用已编译的模式。我实际上计划将编译的模式设置为常量(用于优化目的)
答案 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");