美文网首页
正则表达式

正则表达式

作者: bowen_wu | 来源:发表于2021-09-07 19:33 被阅读0次

概述

正则表达式 => 用于描述文本 | 字符串的一组规则 => 处理文本 + 提取信息

转义字符

有的字符看不见,无法用一个键来表示。常见转义字符

  • \n => 换行符
  • \r
  • \t => 制表符
  • \" & \'
  • \\ => 反斜杠

元字符

  • ^ => 开始位置
  • $ => 结束位置
  • . => 单个任意字符(不一定包含换行符)=> Java 中声明 . 要匹配换行符,默认不匹配换行符 => (?s).
  • \w => 单个 word 字符,字符 | 数字 | 下划线 | 汉字
  • \s => 单个空白字符 \n + \r + \t
  • \d => 单个数字字符 digit
  • \b => 单词的开始或结束
    当要使用元字符原有的含义,需要转义

重复

  • * => 0次 或 多次
  • + => 1次 或 多次
  • ? => 0次 或 1次
  • {n} => n次
  • {n,} => >=n次
  • {n, m} => n到m次
    当要使用上述字符原有的含义时,需要转义

选择

  • [aeiou] => 单个 a | e | i | o | u 字符之一
  • [0-9] => 单个数字字符
  • [A-Z] => 单个大写字母
  • [A-Z0-9_] => 大写字母或者数字或者下划线
  • Hi|hi === [Hh]i => Hi 或者 hi
    当要使用上述字符原有的含义时,需要转义

反义

  • [^aeiou] => 单个除 a | e | i | o | u 之外的字符
  • [^x] => 单个非 x 字符
  • \W => 单个非\w(字母 | 数字 | 下划线 | 汉字)
  • \S => 单个非 \s(空白)
  • \D => 单个非 \d(数字)字符
  • \B => 非开头 | 结束位置
    当要使用上述字符原有的含义时,需要转义

Java 中的 RegExp

Java 中的正则表达式是比较昂贵的

  • 正则表达式需要解析 => java.util.regex.Pattern.compile => private static final Pattern SOME_PRECOMPILED_PATTERN = Pattern.compile("非常复杂的正则表达式");
  • 匹配过程非常昂贵 => 当匹配特别复杂的正则表达式时会发生栈溢出 => 正则表达式匹配的过程是一个回溯的过程

java.lang.String

  • split
  • replaceAll | replaceFirst
  • matches => 效率非常低

分组 & 捕获

Pattern telPattern = Pattern.compile("//d{3}-//d{8}");

Matcher matcher = telPattern.matcher("021-32413143\n345-32415343");

while (matcher.find()) {
    System.out.println(matcher.group(0)); // 021-32413143 | 345-32415343
    System.out.println(matcher.group(1)); // 021 | 345
}

可以将所有符合正则表达式的文本抓出来处理

  • 使用括号 () 来指定一个被捕获的分组
  • 分组的编号从 1 开始,0 是匹配的字符串
  • 分组的编号计算只看左括号
  • (?:)不捕获和分配编号,括号只用于分组或标记优先级

Java 处理捕获

  1. Pattern.matcher
  2. Matcher.find() & Matcher.group()

知识点

  1. window 换行符 /r/n UNIX 换行符 /n
  2. slash -> 斜杠
  3. backslash -> 反斜杠
  4. 各个语言的正则表达式引擎在细枝末节上有不同的实现
  5. Java 正则表达式匹配中使用 \ 需要转义 "[aeiou\\]]"
  6. \n\s*\r
  7. java.lang.String split 会将结尾的空白字符删除
  8. Java 中匹配一个 \ => \\\\ => \ === \\ + 匹配 === \\
  9. 在 Java 中尽量少用或少编译 => 效率低

相关文章

  • Linux命令行与Shell脚本编程大全-shell正则表达式

    本章内容: 定义正则表达式 了解基本正则表达式 扩展正则表达式 创建正则表达式 定义正则表达式 正则表达式是你定义...

  • 正则相关

    正则表达式基本语法 正则表达式常见字符 正则表达式特殊字符 正则表达式数量词 正则表达式边界匹配 正则表达式逻辑或...

  • 正则表达式系列-1

    正则表达式系列-1正则表达式系列-2正则表达式系列-3正则表达式系列-4 什么是正则表达式 正则表达式就是用事先定...

  • 正则表达式

    正则表达式 - 教程正则表达式 - 简介正则表达式 - 语法正则表达式 - 元字符正则表达式 - 运算符优先级正则...

  • Python基础入门 - 正则表达式与综合实战

    1. 初识正则表达式 1.1 介绍 步骤介绍正则表达式入门及应用正则表达式的进阶正则表达式案例 1.2 正则表达式...

  • Java正则表达式参考

    Java正则表达式入门 java正则表达式应用 深入浅出之正则表达式(一) 深入浅出之正则表达式(二) 正则表达式...

  • 正则表达式

    正则表达式 正则表达式就是记录文本规则的代码 正则表达式常用的元字符 正则表达式常用的限定符 正则表达式举例:这里...

  • Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • 正则表达式

    了解正则表达式基本语法 能够使用JavaScript的正则对象 正则表达式简介 什么是正则表达式 正则表达式:用于...

网友评论

      本文标题:正则表达式

      本文链接:https://www.haomeiwen.com/subject/zkshbltx.html