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:头一次翻译外国人写的博客,唉,自己是基本能看懂,但是翻译成中文,那可真是太费劲了,以后还是直接原文转载吧!

你可能感兴趣的:(Pattern,matches(),reg)