很抱歉各位,由于我本文章当时是粘贴,导致排版很不好,但由于又懒不想修改排版,遂提供原版的文档dock 

连接下载:下载:https://wwpx.lanzouw.com/ix0zI0qsknzi 密码:8z3a​​​​​​​

Java正则表达式

正则表达式越到后面学习的好难啊!

0、正则表达式中,字符分为 普通字符和元字符

1、普通字符: 大小写字母,数字 ,下划线,部分特殊符号, 非西文字符等

主要元字符:\    { }    *    ?    +     ( )     [ ]    -    |    ^    $

  1. Pattern类和Matcher类 没有构造方法,只能用普通方法创建对象。
  2. Pattern pattern=Pattern.compile(正则表达式); 、

创建pattern对象。然后

Matcher  matcher=pattern.matcher(待匹配字符串)  创建一个matcher 对象

然后就可以  matcher .方法(方法有很多,各种匹配)  去执行表达式的匹配了

方法:(每匹配一次待匹配字符串 ,待匹配字符串会减少正则表达式匹配成功的内容很重要

lookingAt()方法要一开始就匹配成功正则表达式,就算在后面能满足正则表达式也是flase

 

find()方法,匹配是否满足正则表达式,能就true,否为flase

 

matches()返回待匹配字符串全部是否满足正则表达式,满足为true,否为flase

group () 方法 返回上一次(必须,不然也报错)匹配正则表达式成功(也是)的字串,不然会报错

start()方法 返回匹配成功正则表达式的开始索引位置

end()方法 返回匹配成功的正则表达式的结束索引位置

例如 hello heloo 匹配ell  start返回1,end返回4

 

reset()方法,作用是把matcher的待匹配串给赋值了一个新的字符串

 

 

 

 

 

  1. java 正则表达式匹配规则

\d 表示0-9 的任意一个数字

\D 匹配一个 非数字 字符   \d的相反 可以理解

. 表示任意 一个 字符

\w 匹配一个字母 ,数字,下划线

\W 与\w 相反

\s 匹配 空格 字符 还有 tab 键 也就是 \t \f \v \n \r \v(垂直制表)

\c 表示crtl键  加a-z 和A-Z 不然当 转义c处理。

\cc 表示crtl+c

\S 与\s 相反

* 重复匹配 \d* 这样, \d 只能匹配一个数字 加了* 可以配 0到正无穷 那么多位的 数 组成的数字 比如  ,1 ,11, 111, 1111 ,22222都可以 。第一个逗号前面是空

+ 也是重复匹配 和*一样 但是 +要匹配的是 1 到正无穷位的 字符组成

比如 \d+ 和上面的列举一样 但是第一个逗号 前不能是空,你最少 也得是 一个数字

 

? 也是重复匹配 匹配 0个或一个 字符 比如 \d?

要是匹配成功 待匹配的字符串 必须 是0位 数字(也就是空字符) 或者 一位 数字 (比如0-9 其中的一个 )二位数都是匹配失败 比如 :22

{数字} 重复匹配 指定次数 比如 \d{3,8} ,\d 表示匹配一个 数字 ,{3,8} 表示 这个数 是3个数字 到 8个数字之间,比如 333,2222,77777,12345678 这种 ,{3}表示匹配3 个字符,{3,}这种 表示 3到无穷大 个 字符 组成。

 

正则表达式匹配默认 贪婪模式,就是最大化匹配,能不让其他正则表达式 匹配,就不让它匹配,

在重复匹配符 后加 ? 可以变成非 贪婪模式,就是尽可能少的匹配 字符串,让其他正则表达式 也能匹配。

还有一直叫占有模式,在后面加个 + 这个符号就是占有模式了, 就是不会回溯,匹配一旦错了,就错了,如果你想更懂,了解 正则表达式 匹配机制。就明白了 可以看下面的标注的链接 里面有个 正则表达式的性能 ,就明白了

 

4、

\\b 匹配单词的边界,单词 :因为单词 中文单词 数字,并且这些单词不互斥。

字符:英文字符,中文字符,空格,制表符,换行。

意思是 单词和字符之间的部分, 你想想,这部分是空的 ,中间什么都没有,就像 空字符串一样 “” 这样的,我觉得,这拿来分割有用,提取,提了个寂寞。

\\B与\\b相反

-  表示范围 比如 a-z 就是a到z的字母

匹配开头与结尾

^表示开头,$表示结尾

 

例如 ^a\d+b$  匹配的可以有 a253b 或者 a2b

解释:^表示开头 a 表示 字符a ,\d表示一个数字 +表示1个到无穷个数字 ,b表示 字符b ,$表示结尾 ,结合起来就是 字符串 以a开头 以b结尾 中间1个数字以上

 [ ]匹配指定范围 吸 不太好说

举例子吧, [123456789]不太好看,[1|2|3|4|5|6|7|8|9]中|是或的意思 ,就是 里面数字 随便一个 ,可以简写[0-9] 这样 还有[a-z] ,[A-Z] 表示 范围内 其中一个字符

再来个例子 :把上面结合起来 [0-9a-zA-Z]{5} 可以匹配 由数字 字母 组成的 5位字符串。比如 5a6F9 可以匹配成功

[ ]里面加个^ 表示取反的意思 比如:[^0-9] 表示单个字符, 除了0到9 的数字之外 的 其他字符。换个意思,就是 这个待匹配的字符 不能是个数字。

 

( ) 括号匹配 ,像数字的 提公因式一样

比如 :正则表达式 study\\s(math|english|chinese)

可以匹配 study math或者study english或者study chinese之一的 一个字符串

( )分组匹配 ()其实是有两个意思的 第一个是上面的,第二个是这里的。比如这个 ([a-z]+)\\-([a-z]+) 规则

待匹配字符串:english-book

分组可以在用Pattern 类和Macher类时候,可以提取分别提取分组的内容,可以单独输出 第一个括号匹配的内容,和第二个括号里面的内容。

 

还有一个功能,(a)(b)\\1 规则,\\1是 引用第一个组 ,这种引用最多到\\9 ,比如把第一个 括号的内容 匹配的 给\\1 去 第二个b匹配了, 就给 \\2 去

 

 

 

 

 

  1. 非贪婪匹配 ,一般正则表达式匹配都是贪婪模式,比如

([0-9]+)(0*) 对于 188800000 group(1)方法 内容就不是 1888了,而是全部。也就是 188800000

若想非贪婪 加个?就可以了   上面的 :([0-9]+?)(0*)  这样的正则表达式,非贪婪我理解就是 在满足匹配规则情况下,尽可能少的匹配 比如比如 (18880) (0000)这样也可以满足,(188800) (000) 也可以满足匹配。 但是最低是 (1888)(00000),不能(188)(800000)因为这样不满足匹配规则。

 

 

 

| 多选字符,在上面的 [ ]中用过了 就是 或的意思

. 匹配除了 \n 的其他任意 字符

 

正则表达式也有 优先级 ,从左往有。 以下字符 优先级从高到低 依次为:  

\ 转义字符

() 与(?=)与 (?:)和[ ] 括号

* ? +  { }  

^ $   任何字符* (重复匹配) *字符 (就是 *a 可以匹配 1a  ba这种 *表示任意字符)

  1. 反向引用

我的理解是 正则表达式 少写了几遍,代码重用型增加

(?<自定义名字>正则表达式)

想要引用上一个的正则表达式匹配的值

\\k<你刚刚定义的正则表达式 名字>

 

  

还有一中是 按位置 在( ) 规则的使用时候讲了

这两个是捕获型,就是group()可以在括号填写数字,可以输出 指定匹配的位置

(?:正则表达式) 非捕获组

(?=正则表达式) 零宽断言

比如,有一个正则规则 :thankful(?=ly)

待匹配字符串为:thankfully

这个正则意思是:有一个字符串 前面是thankful 紧接着后面是ly

那么就会匹配成功,输出thankful,而不是thankfully。因为是从字符串0索引位置开始计算,不太好说 用文字。

为什么要叫是零宽度呢? 因为 下一次匹配 是在thankful之后开始的,而不是thankfully之后开始匹配字符

可以这么理解 先判断 是否有 ly的字符串,看它紧邻的前面的字符串 与ly 前面是否一样,一样就true,否,相反。如果后面有字符串,也看紧邻的字符串是否和后面的一样,一样的道理

或者这么理解:if    ly正则表达式满足不 满足  看前面紧邻的是否满足,满足,再看后面的是否满足。满足 就ok。

这个也是非捕获组,用括号括起来,group方法不会输出括号的里面的

最新:比如字符串是:abcdefghijkl  往前扫,起始位置不一样

正则规则 (?=def)defg(?=hij)

它的意思是 defg 字符串 在d字符开始 匹配def

然后在 第二个括号是 在g之后的字符开始匹配 也就是从h字符开始,然后 hij 匹配成功

 

(?<=正则表达式)  往后扫 起始位置不一样

比如 abcdefg  然后(?<=bc)def(?<=ef)

第一个bc指的是 在de前面 紧挨这bc字符串,

第二个正则表达式 f指的是 匹配的 def 从f开始往后扫  ef

 

(?!正则表达式) 往后扫

比如 字符串abcdefghijkl

正则规则: de(?!g)

意思是 从字符串往后扫,然后,在f的位置,判断 f不是g 为 true

然后 (?!g) 这个规则匹配成功的 前面 de 和正则的de 匹配为true

所以成功

 

如果括号在 前面 ,包括fg ,在f位置包括f 开始 从右往左扫,扫到f的位置

 

 

(?<!正则表达式) 往后扫

比如 字符串 : abcdefghijklmn

正则规则:(?<!de)fg

从右往左扫 扫到fg 然后 不包括fg ,在f的前面的字符 e开始 扫是否满足括号的表达式,明显 de 是满足的 ,但是有的叹号 表示取反,就是 说,de不等于de  ,判断可得,这是错的 所以输出为空

 

如果括号在后面 就的包括 fg字符了, 就是从g字符,包括g字符,开始右到左扫,了。相当于问:fg字符串的 包括fg  左边 的字符串是不是fgh 是为true 否就false

 

结果是空因为正好匹配,!表示不相等 就错误,就为空

忽略大小写 (?i) ab 忽略ab的大小写

A(?i)bc  忽略 bc的大小写

99、巧妙用法 [Hh][1-6] 组合匹配 可以匹配 H1

 

Javaassist 特殊参数

 

参靠链接(正则表达式匹配机制):我觉得这个比较全,但是有些还是难明白

Java 正则从入门到精通 | JAVACORE

 

 

参考链接(断言):https://blog.51cto.com/u_13984191/5039634

参考链接(贪婪,非贪婪 ,占有):

JAVA 正则表达式的三种模式: 贪婪, 勉强和占有的讨论 - kuroniko - 博客园

https://blog.csdn.net/xiaoliuliu2050/article/details/80758218

java正则表达式(很全)个人学习总结相关推荐

  1. Elasticsearch Java API 很全的整理以及架构剖析

    Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种.相比来说transportClient API效率更高, ...

  2. Java多线程(全)学习笔记(上)

    2019独角兽企业重金招聘Python工程师标准>>> 一.线程的创建和启动 java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每条线程的作用是 ...

  3. 【Java全栈】Java全栈学习路线及项目全资料总结【JavaSE+Web基础+大前端进阶+SSM+微服务+Linux+JavaEE】

    目录 jdk api 1.8中文版 jdk api 1.8_google.CHM 零:Java 全栈知识体系 第一阶段:JavaSE 一,程序应用(★★) 二,面向对象程序设计基础(★★★) 面向对象 ...

  4. java正则表达式课程_通过此免费课程学习正则表达式

    java正则表达式课程 by Beau Carnes 通过博卡恩斯 通过此免费课程学习正则表达式 (Learn Regular Expressions with this free course) & ...

  5. java 正则表达式学习

    一. Java正则表达式 在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂. 因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 正则表达式是一种可 ...

  6. java正则表达式 1,Java正则表达式学习(1)

    Java正则表达式学习(一) 1.什么是正则表达式: 正则表达式(regular expressions) 是一种描述字符串集的方法,它是以字符串集中各种字符串的公有特征为依据的. 正则表达式可以用于 ...

  7. 《Java Web开发入门很简单》学习笔记

    <Java Web开发入门很简单>学习笔记 1123 第1章 了解Java Web开发领域 Java Web主要涉及技术包括:HTML.JavaScript.CSS.JSP.Servlet ...

  8. Java闭关修炼64课 很适合新手学习的JAVA视频教程

    Java闭关修炼64课 很适合新手学习的JAVA视频教程 java闭关修炼第一课 什么是java(1).rar   java闭关修炼第一课 什么是java.rar   java闭关修炼第七课 基础语言 ...

  9. java正则表达式学习

    java正则表达式学习 一.java正则表达式 二.简单正则表达式实例 三.捕获组 四.部分正则表达式语法 一.java正则表达式 正则表达式定义了字符串的模式 正则表达式可以用来搜索.编辑或处理文本 ...

最新文章

  1. C++内存分配与对象构造的分离
  2. Apache 工作模式配置优化
  3. 微信分享踩坑:config:invalid signature错误的解决方法
  4. python 不定参数_人生苦短,我学不会Python。——函数中不定长参数的写法
  5. 微信支付android错误码-1,安卓调用微信支付一直都是-1的错误,求问怎么解决
  6. mysql如何用sql增加字段和注释?
  7. Psping四大功能介绍:ICMP Ping/TCP Ping/延迟测试/带宽测试
  8. android stagefright框架
  9. GRE词汇统计大全(二)
  10. NDS程序开发可行性分析报告
  11. 如何为您的ADC选择最合适的基准电压源和放大器
  12. ESPHome 和 Home Assistant传感器之TMT6000 环境光握手
  13. 基于TT 双WAN固件(dualwan)下的QOS脚本 很给力
  14. 蓝桥杯java B组历年省赛真题汇总及题目详解
  15. 【官方】Mysql中注释的规范写法(全部)
  16. python多线程读取列表
  17. 2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛(baseline)
  18. 【独家对话】Esri中国副总裁蔡晓兵专访 :移动信息化是延伸更是创新
  19. 一起自学SLAM算法:7.4 基于贝叶斯网络的状态估计
  20. linux命令-- Unix crontab at 定时任务命令 .

热门文章

  1. 【B2G】Mozilla B2G 操作系统详解,HTML5方兴未艾
  2. anaconda安装失败解决方法
  3. 杭州联通主流套餐推荐
  4. 腾达fh365虚拟服务器,腾达a6路由器设置中继模式操作步骤
  5. UA MATH564 概率论VI 数理统计基础3 卡方分布下 Cochran定理
  6. MySQL的存储引擎(InnoDB与MyISAM)
  7. 滚动条样式-鼠标悬浮才展示滚动条
  8. 随机格言生成器(Random Quote Machine)的制作
  9. android selector 开关,android selector 状态切换 以及动画
  10. Duplicated jQuery selector