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