正则表达式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是一个非强制异常类,它表示一个正则表达式模式中的语法错误 。
- find()方法是部分匹配,是查找输入串中与模式匹配的子串,如果该匹配的串有组还可以使用group()函数
- matches()是全部匹配 , 是将整个输入串与模式匹配,如果要验证一个输入的数据是否为数字类型或其他类型,一般要用matches()
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);}}
文章插图
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】
文章插图
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);}}
文章插图
5.7反向引用
请看下面的问题:给定一段文本 , 请找出所有四个数字连在一起的子串 , 并且这四个数字要满足:
- 第一位与第四位相同
- 第二位与第三位相同
- 分组
我们可以用圆括号组成一个比较复杂的匹配模式 , 那么一个圆括号的部分我们可以看作是一个子表达式/分组
- 捕获
把正则表达式中的 子表达式/分组 匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用,从左向右,以分组的左括号为标志 , 第一个出现的分组的组号为1,第二个为2,以此类推 。组0代表的是整个正则式
-详见5.4.6
- 反向引用
圆括号的内容被捕获后,可以在这个括号后被使用,从而写出一个比较实用的匹配模式,这个我们称为反向引用 , 这种引用既可以是在正则表达式内部 , 也可以是在正则表达式外部 , 内部反向引用使用\\分组号,外部反向引用使用$分组号推荐阅读
- day51-正则表达式02
- day50-正则表达式01
- Java函数式编程:一、函数式接口,lambda表达式和方法引用
- .net lambda表达式合并
- SpringBoot框架SpEL表达式注入漏洞复现与原理分析
- C++ 使用栈求解中缀、后缀表达式的值
- 【Java8新特性】- Lambda表达式
- 二 Python常用的正则表达式
- spring cron表达式源码分析
- 怎么算预产期