Java正则表达式-模式

时间:2020-01-09 10:35:40  来源:igfitidea点击:

JavaPattern类(java.util.regex.Pattern)是Java正则表达式API的主要访问点。每当需要使用Java中的正则表达式时,就从Java的Pattern类开始。

在Java中使用正则表达式有时也称为Java中的模式匹配。正则表达式有时也称为模式(因此是JavaPattern类的名称)。因此,术语Java中的模式匹配是指使用Java将正则表达式(模式)与文本匹配。

JavaPattern类可以以两种方式使用。我们可以使用Pattern.matches()方法快速检查文本(字符串)是否与给定的正则表达式匹配。或者,我们可以使用Pattern.compile()来编译Pattern实例,该实例可以多次使用以将正则表达式与多个文本进行匹配。下面介绍了Pattern.matches()Pattern.compile()方法。

Pattern.matches()

检查正则表达式模式是否与文本匹配的最简单方法是使用静态Pattern.matches()方法。这是Java代码中的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变量所引用的字符串中搜索单词" is"的出现,从而允许该单词前后有零个或者多个字符。

如果只需要一次检查文本的模式,则Pattern.matches()方法就可以了,并且Pattern类的默认设置是合适的。

如果我们需要匹配多次,甚至访问各种匹配项,或者只需要非默认设置,则需要使用Pattern.compile()方法来编译Pattern实例。

Pattern.compile()

如果我们需要多次将文本与正则表达式模式进行匹配,则需要使用Pattern.compile()方法创建一个Pattern实例。这是一个JavaPattern.compile()示例:

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。这是一个使用特殊标志的JavaPattern.compile()示例:

Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);

JavaPattern类包含一个标志(int常量)列表,我们可以使用它们来使Pattern匹配以某些方式起作用。上面使用的标志使模式匹配在匹配时忽略文本的大小写。有关可以与JavaPattern类一起使用的标志的更多信息,请参见JavaDoc forPattern

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);
    }
}

"匹配器"非常先进,可让我们以多种方式访问文本的匹配部分。为了简短起见,有关Java Matcher类的文本中更详细地介绍了" Matcher"。

Pattern.split()

使用正则表达式(模式)作为分隔符,Pattern类中的split方法可以将文本拆分为String数组。这是一个JavaPattern.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()示例将text变量中的文本分割成5个单独的字符串。这些字符串中的每一个都包含在split()方法返回的String数组中。匹配为分隔符的文本部分不包含在返回的String数组中。

Pattern.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"实例的编译值。