正则表达式原理
有关正则表达式的原理,请参考我的另一篇博客
正则表达式
正则表达式在JAVA中的应用
正则表达式在JAVA中的类
正则表达式在JAVA中主要有三个类,Pattern 类,Matcher 类,PatternSyntaxException 异常类
-
Pattern 类:
pattern 对象是一个正则表达式的编译表示。
Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
Pattern p = Pattern.compile("正则表达式"); //创建Pattern类的实例
-
Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
可认为,匹配后所需要的结果都保存在matcher对象当中,调用相应的方法就可以得到。
Pattern p = Pattern.compile("正则表达式"); //创建Pattern类的实例
Matcher m = p.matcher("匹配的字符串"); //创建 matcher类的实例
-
PatternSyntaxException:
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
检测是否匹配(一次性)
Pattern.matches(pattern, content);
可以用来返回字符串与模式是否匹配。
可以不用实例化Pattern对象。
适合只使用一次的检测是否匹配的情况。
第一个参数是正则表达式,第二个参数是要匹配的字符串。
import java.util.regex.Pattern; //注意导入包
public static void main(String[] args) {
// TODO Auto-generated method stub
String content = "I am boy "; 匹配串
String pattern = ".*boy.*"; 匹配模式
boolean isMatch = Pattern.matches(pattern, content);
System.out.println("字符串中是否包含了 'boy' 子字符串? " + isMatch);
}
输出:
检测是否匹配(通常)
通常需要重复使用正则表达式的时候,需要将正则表达式编译为Pattern
类的实例。
Pattern p = Pattern.compile("正则表达式"); //创建Pattern类的实例
Matcher m = p.matcher("匹配的字符串");
boolean b = m.matches();
常用的Matcher实例方法:
public static void main(String[] args) {
// TODO Auto-generated method stub
// 按指定模式在字符串查找
String input = "This order was placed for QT3000! OK? orderdddorderjjjorder";
String pattern = "(\\D*)(\\d+)(.*)";
//(非数字) (数字) (任意字符串)
// 创建 Pattern 对象
Pattern p = Pattern.compile(pattern);
Pattern newP = Pattern.compile("order");
// 现在创建 matcher 对象
Matcher m = p.matcher(input);
System.out.println("返回该匹配器解释的模式: "+m.pattern());
m.usePattern(newP);
System.out.println("更改匹配器解释的模式: "+ m.pattern());
System.out.println("寻找下一个匹配位置: "+ m.find());
System.out.println("返回匹配的起始: "+ m.start());
System.out.println("返回匹配的末端: "+ m.end());
while (m.find()) { //寻找下一个匹配
System.out.println("返回匹配的起始: "+ m.start());
System.out.println("返回匹配的末端: "+ m.end());
}
}
输出:
捕获组
有关捕获组的概念,请参考正则表达式
public static void main(String[] args) {
// TODO Auto-generated method stub
// 按指定模式在字符串查找
String input = "This order was placed for QT3000! OK?";
String pattern = "(\\D*)(\\d+)(.*)";
//(非数字) (数字) (任意字符串)
// 创建 Pattern 对象
Pattern p = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = p.matcher(input);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) ); //输入的匹配字符串
System.out.println("Found value: " + m.group(1) ); //从左到右的匹配()
System.out.println("Found value: " + m.group(2) );
System.out.println("Found value: " + m.group(3) );
} else {
System.out.println("NO MATCH");
}
}
输出: