Java Regex - Pattern (java.util.regex.Pattern)
Java中的Pattern类是Java正则表达式API的主要入口类,不管在Java中你何时要使用正则表达式,那你必须是从Pattern这个类开始的。
在Java中,涉及正则表达式的时候也经常涉及模式匹配。因此正则表达式在Java中的类也就叫做Pattern。
因此,术语上讲,在Java中它不主张使用文本,而是模式匹配意味着就是正则表达式的匹配
在Java中,Pattern类被用作两个地方,你可以使用Pattern.matches()方法去快速的检查一个文本(String类型)是否匹配一个给定的正则表达式,或者你
可以用
Pattern.compile()
方法编译一个Pattern的实例去多次匹配正则表达式从而避免使用多个文本。
Pattern.matches()和
Pattern.compile()这两个方法都会在下面进行介绍。
Pattern.matches()
最简单的检查一个正则表达式是否匹配某一个文本的方法就是使用Pattern.matches()静态方法,下面是
Pattern.matches()的举例。
import java.util.regex.Pattern; public class PatternMatchesExample { public static void main(String[] args) { String text = "This is the text to be searched " + "for occurrences of the pattern."; String pattern = ".*is.*"; boolean matches = Pattern.matches(pattern, text); System.out.println("matches = " + matches); } }
这个Pattern.matches()的例子是在搜索一个名为text的
String类型引用的
变量里面是否出现单词"is",并且这个单词"is"的前后都允许有0个或者多个字
符(那两个".*"的模式)。
Pattern.matches()这个方法仅仅代替一个文本去做一次模式的检查,那是很好的。但是你需要进行
多次匹配多次出现的时候,甚至想访问各式各样的匹配的,或者仅仅需要不是默认的配置的时候,那么你
就需要利用
Pattern.compile()方法
编译一个
Pattern
的实例。Pattern.compile()
如果你需要不止一次利用正则表达式去匹配一个文本的时候,你需要用Pattern.compile()去
创建一个Pattern的实例,下面是举例。
import java.util.regex.Pattern; public class PatternCompileExample { public static void main(String[] args) { String text = "This is the text to be searched " + "for occurrences of the http:// pattern."; String patternString = ".*http://.*"; Pattern pattern = Pattern.compile(patternString); } }
你也可以使用一些特殊的标记Pattern.compile()去编译一个Pattern的实例,下面是一个举例:
Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
Pattern
类中包含一些常量标记的列表,这些列表都是int类型的,你可以使用它们在一些特定的场合。下面是使用一个标记在进行模式匹配的时候忽略大小写。如果你想获得更多的标记信息,你可以去查看Pattern
的javadoc文件。
Pattern.matcher()
如果你已经获得了Pattern
的实例,那么你就可以用他去获取Matcher
实例,这个Matcher
实例可以在文本中进行模式匹配。下面是从Pattern
实例获取Matcher
实例的例子:
Matcher matcher = pattern.matcher(text);
Matcher
类中有一个matches()方法,它尝试着在文本中进行模式匹配。下面是关于如何使用
Matcher的全部例子:
import java.util.regex.Pattern; import java.util.regex.Matcher; public class PatternMatcherExample { public static void main(String[] args) { String text = "This is the text to be searched " + "for occurrences of the http:// pattern."; String patternString = ".*http://.*"; Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(text); boolean matches = matcher.matches(); System.out.println("matches = " + matches); } }
Matcher
类是非常高级的,他允许你使用各式各样的模式进行部分文本的匹配。为了保持此文的简短,Matcher
类将在其他文章进行介绍。
Pattern.split()
Pattern
类中的split()
方法可以用一个正则表达式作为分隔符把文本分割为一个String类型的数组,这是Pattern.split()方法的举例:
import java.util.regex.Pattern; public class PatternSplitExample { public static void main(String[] args) { String text = "A sep Text sep With sep Many sep Separators"; String patternString = "sep"; Pattern pattern = Pattern.compile(patternString); String[] split = pattern.split(text); System.out.println("split.length = " + split.length); for(String element : split){ System.out.println("element = " + element); } } }
上述例子中Pattern.split()方法把一个文本分割成了5个单独的字符串,每个字符串中都不包含之前的方
法中把他们分割开的分隔符。
Pattern.pattern()
pattern()方法简单的返回
Pattern
类中已经编译过的那个正则表达式。下面是举例。
import java.util.regex.Pattern; public class PatternPatternExample { public static void main(String[] args) { String patternString = "sep"; Pattern pattern = Pattern.compile(patternString); String pattern2 = pattern.pattern(); } }
在这个例子中,pattern2变量将包含"sep",这个值就是在编译Pattern获得实例时产生的。
本文转自: http://tutorials.jenkov.com/java-regex/pattern.html
PS:头一次翻译外国人写的博客,唉,自己是基本能看懂,但是翻译成中文,那可真是太费劲了,以后还是直接原文转载吧!
推荐阅读
-
Java matches类,Pattern类及matcher类用法示例
-
状态模式-State Pattern(Java实现)
-
java基础 xml 使用dom4j解析 xml文件 servlet根据pattern 找到class
-
Singleton design pattern in java
-
Singleton design pattern in java
-
Java设计模式——装饰者模式(Decorator Pattern)
-
观察者模式(Observer Pattern)_Java
-
Java之Pattern.compile函数用法详解
-
【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理
-
java filter filter-mapping配置多个url-pattern