正则表达式

正则表达式

是专门对字符串进行 查找、提取、替换、校验 的一种 强大的 字符串 分析器 。
市面上几乎所有的编程语言都支持正则表达式 。
正则表达式 是由一些特殊 字符组成的

正则匹配规则

精确匹配

  • xyz : 匹配 xyz (非正则中的特殊字符)

单字符匹配

  • [xyz] : 匹配 x, y, z 中的任意一个字符
  • [0-9] : 匹配任意一个数字
  • [a-zA-Z] : 匹配任意一个字母
  • [a-zA-Z0-9] : 匹配任意一个字母或数字
  • [a-z0-9A-Z_] :匹配任意一个字母、数字、下划线(单词字母)
  • [^a-z0-9A-Z_] : 匹配任意一个非单词字符
  • [^0-9] : 匹配任意一个非数字

元字符匹配

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

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

  • \w : 匹配任意一个单词字符、等价于 [a-z0-9A-Z_]

  • \W : 匹配任意一个非单词字符、等价于 [^a-z0-9A-Z_]

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

  • \S : 匹配任意一个非空白字符

    • \h : 匹配任意一个 空格 或者 制表符
    • \t : 匹配任意一个 制表符
    • \r\n : 匹配 window 环境下的 换行
    • \n : 匹配 Linux 环境下的换行
  • . : 除换行符以外的任意字符

  • . : 匹配一个点 (正则中的特殊字符有特殊含义,单如果要匹配特殊字符对应的字符,则需要转义)

多个字符匹配

  • X{m} : 匹配 m 个 X
  • X{m,} : 匹配至少 m 个 X
  • X{m,n}: 匹配 至少 m个 X, 最多不超过 n 个 X

贪婪式匹配

  • X? : 匹配 0 ~ 1 个 X , X{0, 1}
  • X+ : 匹配至少 1 个 X , X{1,}
  • X* : 匹配至少 0 个 X , X{0,}

尽可能多的匹配能够匹配的内容,让贪婪表达式 后面的表达式 尽可能 晚 的尝试匹配

非贪婪式匹配

表现上, 在贪婪式表达式的后面 添加 ? 形成 非贪婪式。

  • X?? : 匹配 0 ~ 1 个 X , X{0, 1}
  • X+? : 匹配至少 1 个 X , X{1,}
  • X*? : 匹配至少 0 个 X , X{0,}

尽可能少的匹配能够匹配的内容,让非贪婪式 后面的表达式 尽可能 早 的完成匹配

分组

使用小括号,将一段正则 括起来,形成一个组

  • 命名捕获分组

给一个组 设置一个名字, 语法 (?regex)

  • 非命名捕获分组

让小括号 不在作为 组 , 语法 (?:regex)

  • 引用分组

引用一个组匹配的内容, 语法 \n (n 代表组的序号)

选择 |

| 可以将2个正则进行拼接、匹配 2个正则 匹配的内容

限定符

  • ^ : 以 … 开头, 必须出现在正则的头部
  • $ : 以 … 结尾、 必须出现在正则的尾部

主要负责校验字符串

匹配中文

  • [\u4e00-\u9fa5]

断言

(?=) : 正向确定断言

\w+(?=s) :  匹配 一个以 s 结尾的单词、且不包含 s  

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

(?<=window)\d+  :  匹配 多个数字、且数字的前面 一定是 window  

(?!) : 正向否定断言

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

Java 中 操作 正则表达式

正则表达式是由一组特殊字符组成的字符串、那么为了和 字符串的使用 进行区分, Java中提供了一个 Pattern 类。
Pattern 类 表示 模式 , 正则就是 一种模式 ,所以 Pattern 用来表示 Java中的正则。
Matcher 类 用来进行正则匹配、可以使用 查找、提取、替换等功能。

Pattern 类

  • Pattern.compile(regex) ; 将一个字符串格式的正则表达式 转成 Pattern 对象

  • Pattern.compile(regex, flags) : 将一个字符串格式的正则表达式 转成 Pattern 对象, 并设置正则修饰符

  • Pattern.matches(regex, str) : 使用正则 匹配 某一个字符串

Pattern 类 提供的成员方法
  • matcher(str) : 传入要处理的字符串、返回一个正则匹配器

Matcher 类 提供的成员方法

  • find() : 查找 字符串中 是否 拥有 满足正则匹配的内容, 如果有,返回 true, find每次只能找到正则匹配的一个内容,如果需要找多个,多次调用 find

  • start() : 获取 正则 匹配的内容的其实位置, 先调用 find() 才可以使用,

  • start(group) : 获取 正则 第 group 组 子表达式 匹配的内容的 起始位置

  • start(groupName) : 获取 正则 组名为 groupName的 子表达式 匹配的内容的 起始位置

  • end() : 获取正则匹配的内容的 结束位置,用法和 start() 相同

  • group() : 用来提取正则匹配的内容, 用法和 start() 相同

  • matches() : 用来对字符串进行校验、会对正则自动添加 限定符

  • appendReplacement(sb, replacement) : 追加替换到 StringBuilder/StringBuffer中

  • appendTail(sb) : 将 字符串尾部的信息 拼接到 StringBuilder/StringBuffer中

 // 做 字符串拼接
StringBuilder sb = new StringBuilder();

while (m.find()) {
    // 获取 正则匹配的 第一组的 内容
    //String key = m.group(1);
    m.appendReplacement(sb, "?");
}
// 整个循环结束后,将 后面的内容拼接到 sb 中
m.appendTail(sb);

正则修饰符 Pattern类提供的静态常量

  • CASE_INSENSITIVE (i 模式) : 正则在进行匹配的时候 不区分大小写

  • DOTALL (点模式、s模式) : 正则中的 . 匹配任意字符(包含换行符)

  • MULTILINE (m 模式): 多行匹配, 限定符可以匹配多行, 主要配合 ^$ 匹配多行~

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值