Java学习笔记6 正则表达式

正则表达式

是一种对字符串进行匹配、检索、和替换的一种规则
正则匹配数据的效果非常高、可读性很差

精确匹配

  • xyz : 匹配字符串中的 xyz

元字符匹配

  • [xyz] : 匹配 x, y, z 中的任意一个字母

  • [a-z] : 匹配 a 到 z 之间的任意一个字母

  • [0-9] : 匹配 0 ~ 9 之间的任意一个数字

  • [.] 或者 . : 匹配一个 小数点

  • [^0-9] : 匹配非数字

  • \d : 匹配一个数字、等价于 [0-9]

  • \D : 匹配一个非数字、等价于 [^0-9]

  • \w : 匹配 字母、数字、下划线、等价于 [a-zA-Z0-9_]

  • \W : 对 \w 取反

  • [\D\d] : 匹配所有的任意一个字符

  • \s : 匹配空白字符(空格、制表符、换行符)

  • \S : 对 \s 取反

  • . : 匹配除换行符之外的任意一个字符

多字符匹配

  • X{n} : 匹配 n 个 X 匹配的内容
  • X{n,} : 匹配至少 n个 X 匹配的内容
  • X{n,m} : 匹配 n ~ m 个 X 匹配的内容, n <= m

X代表元字符匹配规则

贪婪式表达式

  • X* : 匹配 0 ~ N 个 X 匹配的内容, 等价于 {0,}
  • X+ : 匹配 1 ~ N 个 X 匹配的内容, 等价于 {1,}
  • X? : 匹配 0 ~ 1 个 X 匹配的内容, 等价于 {0,1}

非贪婪式表达式

在贪婪式表达式的后面,添加一个 ? 就变成了 非贪婪式表达式

  • X*? : 匹配 0 ~ N 个 X 匹配的内容
  • X+? : 匹配 1 ~ N 个 X 匹配的内容
  • X?? : 匹配 0 ~ 1 个 X 匹配的内容

非贪婪式表达式,一般需要和后面的表达式配合完成匹配
非贪婪式表达式 一般不会出现在正则的尾部

分组(regex)

对正则表达式使用小括号进行分组
作用 是用来将整个正则表达式匹配的内容中 具有价值或者关注的数据 进行单独分组标记、以便后续的数据提取
分组的顺序: 以左括号为主来标记组的顺序

命名捕获分组 (?<name>regex)

给组设置一个名称、方便程序根据名字获取组匹配的内容
?<name> : 给组设置一个名称
不可的语言对他语法可能会不一样,例如 Python的语法式 (?P<name>regex)

非捕获分组 (?:regex)

当使用 小括号的时候,正则表达式会产生分组效果,如果此时不希望小括号作为一个组,那么可以在括号里添加 ?:

引用分组 \n

n 代表 组的编号
通过 引用某一个组匹配的内容,来进行匹配
常用来解决对称匹配问题

选择 |

对一个整体进行 或运算

限定符

一般用来做数据校验,用来校验字符串是否匹配内容

  • ^ : 以 … 开头, 位置写在正则表达式所有匹配规则的前面
  • $ : 以 … 结尾, 位置写在正则表达式所有匹配规则的后面

断言

  • 反向确定断言 (?<=)

  • 反向否定断言 (?<!)

  • 正向确定断言 (?=)

  • 正向否定断言 (?!)

Java中使用正则表达式

  • 在 Java 语言中,正则表达式使用 字符串 的形式 来表示
  • 表示正则表达式的类是 java.util.regex.Pattern 类

将字符串格式的正则表达式转成Pattern对象


Pattern p = Pattern.compile(regex) ; 

Matcher  m  = p.matcher(str) 

m.matches() :  会自动在正则前后加上限定符^$, 用来匹配整个字符串,一般用来做数据校验 

m.find() : 会根据正则表达式,从字符串中查找匹配的内容,如果找到,返回 true 

m.group() : 会提取正则表达式 匹配的内容,但该方法在使用前 必须先调用 m.find() 

matches()

会自动在正则前后加上限定符^$, 用来匹配整个字符串,一般用来做数据校验

find() + group()

会根据正则表达式,从字符串中查找匹配的内容,并获取匹配的容器

group(n)

n 如果是数字,则代表 提取 正则第 n 组 匹配的内容, 如果是 0, 代表获取正则匹配的内容

n 如果是字符串,则代表 命名捕获分组中定义的 组名

字符串替换

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
StringBuilder sb = new StringBuilder();

while (matcher.find()) {
    matcher.appendReplacement(sb, 'xxxxx');
}
matcher.appendTail(sb);

其他方法

Pattern.matches(regex, str) : 校验字符串是否满足条件

字符串中支持正则表达式的方法

  • replaceAll(regex, newstr) : 将 regex匹配的内容全部替换成 newstr

  • replaceFirst(regex, newstr) : 将 regex第一次匹配的内容替换成 newstr

  • split(regex) : 按照正则表达式匹配的内容拆分字符串

  • split(regex, limit) : 按照正则表达式匹配的内容拆分字符串,拆分为limit长度的数组

    • limit 为 0,则代表 全部拆分
  • matches(regex) : 验证字符串

正则修饰符

  • S模式

在 dotAll 模式下, . 匹配任意一个字符

  • I 模式:

在正则表达式匹配内容的时候,忽略大小写

  • M 模式

M模式要配合限定符才能使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值