day52-正则表达式03

正则表达式035.6正则表达式三个常用类java.util.regex 包主要包括以下三个类:Pattern类、Matcher类和PatternSyntaxException类

  • Pattern类
    Pattern对象是一个正则表达式对象 。Pattern类没有公共构造方法 , 要创建一个Pattern对象 , 调用其公共静态方法 , 它返回一个Pattern对象 。该方法接收一个正则表达式作为它的第一个参数 , 比如:Pattern r = Pattern.compile(pattern);
  • Matcher类
    Matcher对象是对输入字符串进行解释和匹配的引擎 。与Pattern类一样 , Matcher类也没有公共构造方法 。需要调用Pattern对象的matcher方法来获得一个Matcher对象
  • PatternSyntaxException类
    PatternSyntaxException是一个非强制异常类 , 它表示一个正则表达式模式中的语法错误 。
5.6.1Pattern类JAVA正则表达式, matcher.find()和 matcher.matches()的区别
  1. find()方法是部分匹配 , 是查找输入串中与模式匹配的子串 , 如果该匹配的串有组还可以使用group()函数
  2. matches()是全部匹配 , 是将整个输入串与模式匹配 , 如果要验证一个输入的数据是否为数字类型或其他类型 , 一般要用matches()
【day52-正则表达式03】package li.regexp;import java.util.regex.Pattern;//演示matcher方法 , 用于整体匹配(注意是整个文本的匹配) , 在验证输入的字符串是否满足条件使用public class PatternMethod {public static void main(String[] args) {String content="hello abc hello,侬好";//String regStr="hello";//falseString regStr="hello.*";//trueboolean matches = Pattern.matches(regStr, content);System.out.println("整体匹配="+matches);}}
day52-正则表达式03

文章插图
matches方法的底层源码:
public static boolean matches(String regex, CharSequence input) {Pattern p = Pattern.compile(regex);Matcher m = p.matcher(input);return m.matches();}可以看到 , 底层还是创建了一个正则表达式对象 , 以及使用matcher方法 , 最后调用matcher类的matches方法(该方法才是真正用来匹配的)
5.6.2Matcher类
day52-正则表达式03

文章插图

day52-正则表达式03

文章插图
package li.regexp;import java.util.regex.Matcher;import java.util.regex.Pattern;//Matcher类的常用方法public class MatcherMethod {public static void main(String[] args) {String content = "hello edu jack tom hello smith hello";String reStr = "hello";Pattern pattern = Pattern.compile(reStr);Matcher matcher = pattern.matcher(content);while (matcher.find()) {System.out.println("====================");System.out.println(matcher.start());System.out.println(matcher.end());System.out.println("找到:" + content.substring(matcher.start(), matcher.end()));}//整体匹配方法 , 常用于校验某个字符串是否满足某个规则//Pattern的matches方法底层调用的就是Matcher类的matches方法System.out.println("整体匹配=" + matcher.matches());//falsecontent = "hello edu jack hspedutom hello smith hello hspedu hspedu";//如果content有字符串 hspedu , 就将其替换为 小猫咪reStr = "hspedu";pattern = Pattern.compile(reStr);matcher = pattern.matcher(content);//注意:返回的字符串newStringContent才是替换后的字符 , 原来的字符串content是不变化的String newStringContent = matcher.replaceAll("小猫咪");System.out.println("newStringContent= " + newStringContent);System.out.println("content= " + content);}}
day52-正则表达式03

经验总结扩展阅读