Java正则入门

kyang MVP++

结构

RegEX

  • 写出正则匹配字符串
1
`String regEx = "匹配式"; 

Pattern

1
`Pattren pattern = Pattern.compile(regEx);

Matcher

1
`Matcher matcher = pattern.matcher('主串')

Matcher 类中的 find() 方法

  • **Mather定义了int[] group**属性来记录所匹配到的元素的下标,初始数组大小为20
  • 在**简单的正则匹配中find**每进行一次会执行以下操作:
    • 匹配到符合元素
    • 将匹配到的元素的起索引记录到**group[0]中,末索引+1记录到group[1]当中去 ,(group[]**每次都会刷新)
    • 用**oldLast**来记录末索引使其下次直接从此位置开始匹配
  • 在有**分组-用括号来分组的情况下的正则匹配中find**每进行一次会执行以下操作:
    • 匹配到符合元素
    • 将匹配到的元素的起索引记录到**group[0]中,末索引+1记录到group[1]当中去 ,(group[]每次都会刷新),将第一组匹配到的元素下标寄宿在group[2]中,第一组末索引+1记录到group[3]**当中去,依此类推
    • 用**oldLast**来记录末索引使其下次直接从此位置开始匹配

Matcher 类中的 group()方法

  • group()进行操作大概就是return substr(group[2*index],group[2*index+1])

循环查找

1
2
3
`while(matcher.find()){
`得到 matcher.group(index);
`}

元字符

  • 转义字符的正确使用\\

限定符

在这里插入图片描述

  • ?、*、+、{}都只对离他最近的产生作用

在这里插入图片描述

  • 它们都会尽可能的匹配多的**贪婪匹配**
  • 如果在其之后还加一个就变为**非贪婪匹配**

选择匹配符

  • |连接两个正则表示或

分组组合和反向引用符

特殊字符

字符匹配符

在这里插入图片描述
在这里插入图片描述

  • \\w还包括_
  • \\s匹配任何空白字符(空格,制表符等)
  • \\S\\s相反
  • 案列:匹配一个字符串abc
    • 不区分大小写**(?i)abcPattern pat = Pattern.compile(regEx,Pattern.CASE_INSENSITIVE)**也可以
    • bc不区分**a(?i)bc**
    • 仅b不区分a((?!)b)c

定位符

在这里插入图片描述

分组

捕获分组

在这里插入图片描述

非捕获分组

  • 即没有group[2]、[3]之类的储存

在这里插入图片描述

反向引用

  • (\\d)\\n
1
String reg = "//d{5}[-](//d)//1{2}(//d)//2{2}(//d)//3{2}"
1
2
3
4
5
6
mather.replaceAll("$1")就是第一个括号的外部使用

删除重复汉字
Pattern.compile("(\\d)\\1+").macther.replaceAll("$1")

content.matches(reg)
  • 标题: Java正则入门
  • 作者: kyang
  • 创建于 : 2024-09-23 11:26:58
  • 更新于 : 2025-07-11 16:56:12
  • 链接: https://blog.kyang.top/2024/09/23/Java正则入门/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论