本小节的目的是熟悉java平台提供的Pattern、Matcher和PatternSyntaxException类的使用。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class RegexDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("input regular express:");
String regularExpr = sc.nextLine();
System.out.print("input string to be matched:");
String inputStr = sc.nextLine();
try {
//构造Pattern得通过其compile方法,参数为正则表达式,同时try-catch里面捕获了PatternSyntaxException异常
Pattern pattern = Pattern.compile(regularExpr);
//通过Pattern对象的matcher方法得到Matcher对象,该方法接受的参数为待匹配字符串
Matcher m = pattern.matcher(inputStr);
boolean found = false;
//下面是对匹配结果的输出,Matcher.find方法用来进行匹配,如果匹配到了返回值为true,否则为false,
//这里循环调用find方法的原因是待匹配的字符串可能存在多个匹配的情况,
//find方法返回false,则说明已经找不到可以匹配的子串了
while (m.find()) {
//一旦,Matcher.find方法返回值是true时,我们可以检查当前匹配的匹配子串的内容,已经它们在待匹配字符串的起止索引位置
System.out.println(
"Found [" + m.group() + "] starting at " + m.start() + " and ending at " + (m.end() - 1));
found = true;
}
if(!found) {
System.out.println("Not Found");
}
} catch (PatternSyntaxException pse) {
System.err.println("Bad regex: " + pse.getMessage());
System.err.println("Description: " + pse.getDescription());
System.err.println("Index: " + pse.getIndex());
System.err.println("Incorrect pattern: " + pse.getPattern());
}
}
}
接下来的章节中,我们的所有示例也是基于上面的代码,主要的学习重点是正则表达式的语法和匹配的细节。
下一节: 【Java正则表达式系列】3. 字符串