Java正则表达式-模式
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"实例的编译值。

