JAVA学习笔记(正则表达式)

本文详细介绍了Java中的正则表达式基本规则,包括单字符和多字符匹配、量词的使用、边界符、分组、逻辑操作以及预定义字符。同时,讲解了在Java字符串中如何运用这些规则进行matches、replace和replaceAll操作,以及split方法的使用。此外,还讨论了正则表达式的贪婪匹配和非贪婪匹配概念,并给出了常见正则表达式用法的实例。
摘要由CSDN通过智能技术生成

1. 匹配规则

1.1 单字符匹配

[ ]    // 例如 [abc] 代表一个a或者一个b或者一个c

1.2 多字符匹配

" " // 例如 "abc" 代表连续的一个字符串abc

1.3 量词

* 表示0次以上, + 表示1次以上, ? 表示0次或1次。

{n}表示固定n次,{n,}表示n次及以上,{n,m}表示n到m次

1.4 边界符

^ // 开始边界  例如"^a" 代表以a开始

$ // 结束边界 例如 "b$" 代表以b结束

备注:字符串和正则类的""中的规则默认都是有开始^和结束$的,默认省略不写。

"^[abc]$"等价与"[abc]"

1.5 分组

( ) // 例如 ([abc])(abc) 1组是一个字符a或b或c, 2组是一个字符串abc

1.6 逻辑

|  // 或 例如 "ab | bc"  一个字符串ab或bc

^ // 非 在[ ] 中  例如 [^a] 代表 a以外的字符

1.7 修饰符

(?i)  // 例如 "ab(?i)[a-z]+"  代表忽略(?i)后字母的大小写,"a((?i)b)[a-z]+"只忽略b大小写

1.8 预定义

\d 代表[0-9], \D 代表[^0-9]

\w 代表[a-zA-Z0-9_] , \W 代表[^a-zA-Z0-9_]

\n 换行,\t 指标, \b 边界符匹配\w以外任意,. 点匹配换行以外任意。

1.9 转义字符

[ ] 中 除了^和-,和预定义字符,其他符号会失去意义。如果需要输出^ - 或预定义的字符串,则需要\做转义 例如:\\代表一个\,\^代表一个^字符。

2. Java字符串

下记方法底层都是调用正则类,所以多次调用最好用正则类的方式。

重要:不加量词默认只能是1个。

2.1 matches(判断字符串是否完全满足规则)

"1ab3".matches("[abc]+") // false   判断是否完全满足一个以上a或b或c

"abaca".matches("[abc]+") // true  ,java字符串\需要转移所以已定义写法"13".matches("\\d+");

2.2 replace和replaceAll(替换字符串)

"1ab3".replace("a", "z"); // 返回1zb3,将a替换成z,replace只能指定字符串,不能指定正则

"abacad".replace("a", "z"); // 返回zbzczd

"1ab3".replaceAll("[abc]", "z"); // 返回1zz3

"abacad".replaceAll("[abc]", "z"); // 返回zzzzzd

字符串.replaceAll("(正则)|(正则)", "<$1>") // $1代表第一组正则,本语句可以将满足第一组正则的字符替换为<加正则元字符加>。相当于把满足规则的字符用<>包起来。

例如:"a1b2a5d".replaceAll("([abc])","<$1>"); 得到 "<a>1<b>2<a>5d"

2.3 split(分割字符串)

"1a3".split("[abc]") // 返回 数组 ["1","3"]

"a1b2a5d".split("[abc]") // 返回 数组 ["","1","2","5d"]

3. 正则类

3.1. 使用

1. 定义规则:Pattern p = Pattern.compile("正则") // 编译正则 例如

2. 关联字符串: Matcher m = p.matcher(字符串) // 例如

3. 做处理:

m.find() // 是否部分匹配,while(m.fing()) { m.start()//当前配置字符开始下标,m.end()// 结束下标,m.group(0)获取匹配字符串,}

m.matches() // 是否全部匹配,m.group(下标) 0:全文字符串,1:满足第一个()分组的字符串

例如:Pattern p = Pattern.compile("([abc]+)|(..[0-9]{1})");

Matcher m2 = p.matcher("abaca");

m.group(1)  // "abaca"

m.group(2) // null

3.2. 贪婪匹配

匹配规则默认从左到右

正常逻辑

Pattern p = Pattern.compile("(\\d+)(0+)");

Matcher m = p.matcher("1230"); // m.group(0)=1230, m.group(1)=123, m.group(2)=0

贪婪匹配(在保证后面规则基础上,会尽量满足前面规则)

Pattern p = Pattern.compile("(\\d+)(0+)");

Matcher m = p.matcher("12300"); // m.group(0)=12300, m.group(1)=1230, m.group(2)=0

非贪婪匹配(在左侧规则量词后加?,优先其他正则组)

Pattern p = Pattern.compile("(\\d+?)(0+)");

Matcher m = p.matcher("12300"); // m.group(0)=12300, m.group(1)=123, m.group(2)=00

3.3 常见用法

1,字符串,是否包含,满足规则的正则。正则类Matcher.find()

2,字符串,是否完全满足规则。正则类Matcher.matches(), 字符串.matches(正则)

3,查询,满足规则的字符。正则类 Matcher.find() ,Matcher.group(0)

4,替换,满足规则的字符。正则类Matcher.replaceAll(字符), 字符串.replaceAll(正则, 字符)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值