正则表达式

正则表达式底层实现

未分组

java 复制代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularTheory {
    public static void main(String[] args) {
        String content="sdfjdskljldfghd1111fkasldfjksld34454glsdk;fjgkl;sdjg444jfgdkl;jg;555lkgj;asdgjf222ekgklsdfjgkl;jdfioertunvklasd;hfgjwehpotojriweop0239fdklhgjklsdp43029nkfsdnvj;333klfdjslafj859cklvjl;ds332dklsvhjn;kldfnvklas";
        String regStr="\\d\\d\\d";
        //2.创建模式对象[即正则表达式对象]
        Pattern pattern=Pattern.compile(regStr);
        //3.创建匹配器。按照正则表达式规则匹配content对象
        Matcher matcher=pattern.matcher(content);
        //4.开始匹配
        /**
         * matcher.find()
         * 1.根据指定的规则,定位满足规则的 子字符串
         * 2.找到后将 子字符串的开始的索引记录到matcher对象的属性 int[] groups;
         *   groups[0]=0,把该字符串的结束 索引+1的值记录到groups[1]=4
         * 3.同时记录oldLast的值为 子字符串的结束的 索引+1的值即4,即下次执行find时,就从4开始匹配
         *   根据groups[0]和groups[1]的记录的位置,从content开始截取子字符串。
         */
        while(matcher.find()){
            System.out.println("找到:"+matcher.group(0));
        }
    }
}

分组

java 复制代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularTheory {
    public static void main(String[] args) {
        String content="1998年12月8日,第二代Java平台的企业版J2EE发布。1999年6月,Sun公司发布了第二代Java平台(简称为Java2)的3个版本:J2ME(Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境;J2SE(Java 2 Standard Edition,Java 2平台的标准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2平台的企业版),应用于基于Java的应用服务器。Java 2平台的发布,是Java发展过程中最重要的一个里程碑,标志着Java的应用开始普及.";
        String regStr="(\\d\\d)(\\d\\d)";
        //2.创建模式对象[即正则表达式对象]
        Pattern pattern=Pattern.compile(regStr);
        //3.创建匹配器。按照正则表达式规则匹配content对象
        Matcher matcher=pattern.matcher(content);
        //4.开始匹配
        /**
         * matcher.find()[考虑分组]
         * 什么是分组,如(\d\d)(\d\d),第一个小括号表示第一组,第二个小括号表示第二组...
         * 1.根据指定的规则,定位满足规则的 子字符串如((19)(98))
         * 2.找到后将 子字符串的开始的索引记录到matcher对象的属性 int[] groups;
         *   2.1 groups[0]=0,把该字符串的结束 索引+1的值记录到groups[1]=4
         *   2.2 记录第一组括号匹配到的字符串 groups[2]=0,groups[3]=2 [即19]
         *   2.3 记录第二组括号匹配到的字符串 groups[4]=2,groups[5]=4 [即98]
         * 3.同时记录oldLast的值为 子字符串的结束的 索引+1的值即4,即下次执行find时,就从4开始匹配
         *   根据groups[0]和groups[1]的记录的位置,从content开始截取子字符串。
         */
        while(matcher.find()){
            System.out.println("找到:"+matcher.group(0));
            System.out.println("第一组小括号:"+matcher.group(1));
            System.out.println("第二组小括号:"+matcher.group(2));
        }
    }
}

输出:

复制代码
找到:1998
第一组小括号:19
第二组小括号:98
找到:1999
第一组小括号:19
第二组小括号:99

正则表达式语法

正则转义符


java 复制代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExp02 {
    public static void main(String[] args) {
        String content="abc$(abc(123(";
        //匹配(
        //注意Java中,两个\\相当于其他语言的一个\
        String regStr="\\(";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while(matcher.find()){
            System.out.println("找到"+matcher.group(0));
        }
    }
}

字符匹配夫

注意:\w还匹配下划线



选择匹配符

限定符

符号 含义 示例 说明 匹配输入
* 指定字符重复0次或n次(无要求) (abc)* 仅包含任意个abc的字符串,等效于\w* abc、abcabc
+ 指定字符重复1次或n次(至少一次) m+(abc)* 以至少1个m开头,后接任意个abc的字符串 m、mabc、mabcabc
指定字符重复0次或1次(最多一次) m+(abc)? 以至少1个m开头,后接ab或abc的字符 mab、mabc、mmmab、mmabc
{n} 指定输入n个字符 [abcd]{3} 由abcd中字符组成的任意长度为3的字符串 abc、bdc、adc
{n,} 指定至少n个匹配 [abcd]{3,} 由abcd中字母组成的任意长度不小于3的字符串 aab、dbc、aaabdc
{n,m} 指定至少n个但不多于m个匹配 [abcd]{3,5} 由abcd中字母组成的任意长度不小于3,不大于5的字符串 abc、abcd、aaaaa、bcdab

定位符

分组


应用实例

Matcher类

java 复制代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class fir {
    public static void main(String[] args) {
        String content="hello edu jack tom hello smith hello";
        String regStr="hello";

        Pattern pattern =Pattern.compile(regStr);
        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()));
        }
    }
}

反向引用



相关推荐
小趴蔡ha2 天前
如何将XML格式标注文件转换为YOLO格式进行目标检测训练(附代码)
xml·yolo·目标检测
__Yvan2 天前
解决ConstraintLayout中LinearLayout显示异常问题
android·xml·约束布局
weixin_307779132 天前
构建健壮的XML文档抓取与摘要流水线:Requests + urllib3.Retry + lxml 实践
xml·开发语言·python·算法·性能优化
kgduu3 天前
js之xml处理
xml·前端·javascript
aisifang003 天前
使用 Logback 的最佳实践:`logback.xml` 与 `logback-spring.xml` 的区别与用法
xml·spring·logback
小江的记录本4 天前
【Spring Boot—— .yml(YAML)】Spring Boot中.yml文件的基础语法、高级特性、实践技巧
xml·java·spring boot·后端·spring·spring cloud·架构
青槿吖5 天前
第二篇:告别XML臃肿配置!Spring注解式IOC/DI保姆级教程,从入门到真香
xml·java·开发语言·数据库·后端·sql·spring
SEO_juper5 天前
XML Sitemap 详解:作用、意义与创建必要性
xml·.net·seo·数字营销·2026
de_wizard6 天前
【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
xml·spring·mybatis
缘于自然87 天前
高通modem如何确定MBN选的是哪个carrier_policy.xml
xml·modem·mbn