Java学习之正则表达式-2021-09-02~5

正则表达式

1.正则表达式入门简介、使用…

正则表达式的使用场景

  • 批量提取/替换有规律的字符串
  • 在各种高级的文本编辑器中的使用
  • 在各类办公软件( Office等)中使用
  • 各开发语言中iR ( C#/ Java / JS / Perl/ PHP 等等)
  • 用户输入的合法性验证(IP地址,特殊的订单号要求等)
  • 模板引擎的标签库开发
  • 网络爬虫(抓取机器人)的开发
  • 批量的文本高效处理

正则表达式的测试工具

  • 推荐RegexBuddy

    http://www.regexbuddy.com

  • RegExBuilder

    http://www.redfernplace.com/software-projects/regex-builder/

  • 在线测试工具

    http://tool.chinaz.com/regex/

Java学习之正则表达式-2021-09-02~5_第1张图片

2.初识正则表达式以及元字符概念

Agenda

  • Windows系统命令行中存在的最简单的正则表达式
  • 元字符概念以及元字符的反义
  • 转义的概念以及正则表达式中的使用正
  • 则表达式语言中的注释方法

Windows系统命令行中存在的最简单的正则表达式

  • *任意长度的字符串
  • ?长度为1的任意字符串

元字符概念

Java学习之正则表达式-2021-09-02~5_第2张图片

使用操作

Java学习之正则表达式-2021-09-02~5_第3张图片

Java学习之正则表达式-2021-09-02~5_第4张图片

元字符的反义

Java学习之正则表达式-2021-09-02~5_第5张图片

字符转义

  • 如果就是想要匹配.或者?这样的字符呢?
  • 转义字符\
\. \*  \?  

正则表达式中的注释

  1. ​ 2[0-41\d(?#200-249)250-5[01]?\d\d?(?#0-199).

  2. 启用“忽略模式里的空白符”选项

(?<=	#断言要匹配的文本的前缀

<(w+)> 	#查找尖括号括起来的字母或数字(即HTML/XML标签)

)	#前缀结束

.* 	 #匹配任意文本

(?= 	#断言要匹配的文本的后缀

	 #查找尖括号括起来的内容:前面是一个"/" ,后面是先前捕获的标签

) 	#后缀结束 

3.正则表达式中的重复

Agenda

  • 分支条件
  • 正则表达式中的几种重复模式
  • 重点解释重复的几种模式的区别
  • 讲解正则表达式中重复的使用场景

正则表达式中的几种重复模式

Java学习之正则表达式-2021-09-02~5_第6张图片

分支条件

  • 用|不同的规则分隔开
  • 从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的件了
  • 0\d{2}-\d{8}|0\d{3}-\d{7}

字符类

  • [0-9] ==\d

  • [a-z0-9A-Z_] ==\w

  • [&?.]

  • [aeiou]

  •  \(?0\d{2}[)-}?\d{8} 
    

Java学习之正则表达式-2021-09-02~5_第7张图片

4.正则表达式中的分组概念&贪婪与懒情

Agenda

  • 讲解正则表达式中重要的一个概念:命组
  • 分组的概念
  • 分组的命名模式分
  • 组的用途
  • 正则表达式中的贪婪和懒惰

分组

  • 将子表达式进行做成子集

  • 使()进分组

  • 方便对match的字符串进行划分

    (\d{1,3}\.){3}\d{1,3}
    
  • 分组的命名: (? exp)

  • (?:exp) 匹配exp不捕描获匹配的文本,也不给此分组分配组号

贪婪与懒情

  • 贪婪(尽可能多)

    a.*b (aabab) -> aabab

  • 懒惰(尽可能少)

    匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复a.*?b (aabab)-> aab

Java学习之正则表达式-2021-09-02~5_第8张图片

处理选项(RegexOptions)

Java学习之正则表达式-2021-09-02~5_第9张图片

5.正则表达式高阶讲解

Agenda

  • 反向引用
  • 零宽断言的概念以及使用场景
  • 负向零宽断言的概念以及使用场景
  • 冗长的平衡组和递归匹配

反向引用

  • 要匹配taobao taobao , home home这样的情况如果处理?
  • \b(\w+)\b\s+\1\b
  • \b(? \w+)\b\s+\k\b这是命名后的另一种写法

Java学习之正则表达式-2021-09-02~5_第10张图片

零宽断言

Java学习之正则表达式-2021-09-02~5_第11张图片

  • ?=exp零宽度正预测先行断言,自身出现的位置的后面能匹配表达式exp

  • \b\w+(?=ing\b)

  • I’m sing ing while you’re dancing.

  • ?<=exp零宽度正回顾后发断言,自身出现的位置的前面能匹配表达式exp

    (?<=\bre)w+\b

    reading a book

负向零宽断言

  • 查找这样的单词-它里面出现了字母q,但是q后面跟的不是字母u

    	\b\w*q[^uJw*\b
    
    • 上面的表达式有没有问题呢?使用零宽度负预测先行断言
  \b\w*q(?!u)\w*\b 

并不消费任何字符

  • \d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字

  • \b((?!abc)w)+\b匹配不包含连续字符串abc的单词

  • 那么同样的,还有零宽度负回顾后发断言

    • (?
    • (?<=<(w+)>).*(?=)不包括前缀和后缀本身

平衡组/递归匹配

  • 如何把xx yy这样的字符串里,最长的配对的尖括号内的内容捕获出来?
  • (?‘group’)把捕获的内容命名为group,并压入堆栈(Stack)
  • (?"-group’)从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
  • (?(group)yesIno)如果堆栈上存在以名为group的捕获内容的话,继续匹Eyes部分的表达式,否则继续匹配no部分
  • (?!)零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败

Java学习之正则表达式-2021-09-02~5_第12张图片

总结


  • 多进行实际的实例

  • 想学好多练习

  • 学好后一劳永逸,威力无穷

Java学习之正则表达式-2021-09-02~5_第13张图片

你可能感兴趣的:(学习,正则表达式,测试工具)