文档

Java™教程
隐藏目录
Pattern类的方法
路径:基本Java类
课程:正则表达式

Pattern类的方法

到目前为止,我们只使用测试工具创建了最基本形式的Pattern对象。本节将探讨一些高级技术,例如使用标志创建模式和使用嵌入式标志表达式。还将探讨一些我们尚未讨论的其他有用方法。

使用标志创建模式

Pattern类定义了一个可接受一组影响模式匹配方式的标志的替代compile方法。标志参数是一个位掩码,可以包括以下任何公共静态字段:

RegexTestHarness.javacompile
Pattern pattern = 
Pattern.compile(console.readLine("%n输入正则表达式: "),
Pattern.CASE_INSENSITIVE);
 
输入正则表达式: dog
输入要搜索的字符串: DoGDOg
我在索引0到索引3之间找到文本 "DoG"。
我在索引3到索引6之间找到文本 "DOg"。
|Console
 
pattern = Pattern.compile("[az]$", Pattern.MULTILINE | Pattern.UNIX_LINES);
int
 
final int flags = Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE;
Pattern pattern = Pattern.compile("aa", flags);

嵌入式标志表达式

嵌入式标志表达式compile(?i)
 
输入正则表达式: (?i)foo
输入要搜索的字符串: FOOfooFoOfoO
我在索引0到索引3之间找到文本 "FOO"。
我在索引3到索引6之间找到文本 "foo"。
我在索引6到索引9之间找到文本 "FoO"。
我在索引9到索引12之间找到文本 "foO"。
Pattern
常量 等效的嵌入式标志表达式
Pattern.CANON_EQ
Pattern.CASE_INSENSITIVE (?i)
Pattern.COMMENTS (?x)
Pattern.MULTILINE (?m)
Pattern.DOTALL (?s)
Pattern.LITERAL
Pattern.UNICODE_CASE (?u)
Pattern.UNIX_LINES (?d)

使用matches(String,CharSequence)方法

Pattern类定义了一个方便的matches方法,可以快速检查给定输入字符串中是否存在模式。和所有的公共静态方法一样,您应该通过类名来调用matches,例如Pattern.matches("\\d","1");。在这个例子中,该方法返回true,因为数字 "1" 匹配正则表达式\d

使用split(String)方法

split方法是一个很好的工具,可以收集与匹配的模式相邻的文本。如下所示在SplitDemo.java中,split方法可以从字符串"one:two:three:four:five"中提取单词"one two three four five":

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class SplitDemo {

    private static final String REGEX = ":";
    private static final String INPUT =
        "one:two:three:four:five";
    
    public static void main(String[] args) {
        Pattern p = Pattern.compile(REGEX);
        String[] items = p.split(INPUT);
        for(String s : items) {
            System.out.println(s);
        }
    }
}
输出:

one
two
three
four
five

为了简单起见,我们匹配了一个字符串字面量,即冒号(:),而不是一个复杂的正则表达式。由于我们仍然使用PatternMatcher对象,您可以使用split来获取任何正则表达式两侧的文本。下面是同样的例子,在SplitDemo2.java中修改为按数字进行拆分:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class SplitDemo2 {

    private static final String REGEX = "\\d";
    private static final String INPUT =
        "one9two4three7four1five";

    public static void main(String[] args) {
        Pattern p = Pattern.compile(REGEX);
        String[] items = p.split(INPUT);
        for(String s : items) {
            System.out.println(s);
        }
    }
}
输出:

one
two
three
four
five

其他实用方法

您可能也会发现以下方法有一些用处:

java.lang.String中的Pattern方法等效方法

java.lang.String中也存在正则表达式支持,通过几种模拟java.util.regex.Pattern行为的方法实现。为了方便起见,下面列出了它们的API关键摘录。

还有一个replace方法,用于用另一个CharSequence替换一个CharSequence


上一页:边界匹配器
下一页:Matcher类的方法