欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java Regex - Pattern (java.util.regex.Pattern)

程序员文章站 2022-04-22 16:46:24
...

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