正则表达式

语法一:普通字符

  • 字母,数字,汉字,下划线,以及没有特殊定义的标点符号,都是“普通字符”。表达式种的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。
    例如:

被匹配到的文本,会以黄蓝相隔
在这里插入图片描述

简单的转义字符:

字符作用
\n代表换行符
\t制表符
\\代表\本身
\^,\$,\.,\(,\),\{,\},\?,\+,\*,\|,\[,\]匹配这些字符本身

语法二:标准字符集合

  • 能够与“多种字符” 匹配的表达式
  • 注意区分大小写,大写是相反的意思
字符作用大写作用
\d任意一个数字,0-9中的任意一个\D匹配除了数字以外的字符
\w任意一个数字或字母或下划线,也就是A~Z a~z 0~9 _\W匹配除了A~Z a~z 0~9 _以外的字符
\s包括空格,制表符,换行符等空白字符的任意一个\S匹配除了空格,制表符,换行符以外的字符
.小数点可以匹配任意一个字符(除了换行符)

例如:
在这里插入图片描述

语法三:自定义字符集合

  • [ ] 方括号匹配方式,能够匹配方括号中任意一个字符。
[ab5@]匹配ab5@当中任意一个。
[^abc]匹配a,b,c之外的任意一个字符,^ 在方括号里是取反的意思
[a-c]匹配a~c之间任意一个字母

正则表达式的特殊符号 除了^ ,- 之外,如果被包含在方括号里,则失去特殊意义,也是当普通字符处理

例如:
在这里插入图片描述

量词

{n}表达式重复n次
{m,n}表达式至少重复m次,最多重复n次
{m,}表达式至少重复m次
?匹配表达式0次或1次,相当于{0,1}(这个问号并不是非贪婪模式那个问号)
+表达式至少出现一次,相当于{1,}
*表达式不出现或出现任意次,相当于{0,}

例如:
在这里插入图片描述
在这里插入图片描述

匹配次数中的贪婪模式(匹配字符越多越好,默认是这个模式)
在这里插入图片描述

匹配次数中的非贪婪模式(匹配字符越少越好,修饰匹配次数的特殊符号后再加上一个"?"号)
在这里插入图片描述
? 的使用:
在这里插入图片描述效果是一样的
在这里插入图片描述
+ 的使用
在这里插入图片描述
* 的使用:
在这里插入图片描述

字符边界

本组标记匹配的不是字符 而是位置,符合某种条件的位置

^与字符串开始的地方匹配
$与字符串结束的地方匹配
\b匹配一个单词边界

^左边是字符串开始的位置 才符合
在这里插入图片描述

$右边是字符串结束的位置 才符合

在这里插入图片描述
\b单词边界:\b在的位置不全是\w (也就是不全是 数字或字母或下划线)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择符和分组,反向引用

在这里插入图片描述

| 表达式:在这里插入图片描述
()捕获组 反向引用:

每一对()会分配一个编号,使用()的捕获根据左括号的顺序从1开始编号

在这里插入图片描述
(?:)非捕获组 :不在内存中存储匹配到的结果
在这里插入图片描述

零宽断言

在这里插入图片描述

其实很简单,就是说 匹配一个字符串,前面要满足什么条件或者后面要满足什么条件,但是条件并不加入最后的匹配结果…

(?=exp):后面需要满足xxx条件(exp 为独立的表达式)
在这里插入图片描述
(!=exp):后面不能是xxx条件(exp 为独立的表达式)
在这里插入图片描述

常用配置

在这里插入图片描述

练习:

在这里插入图片描述

电话号码: 0开头 2~3位数字 - 7~8 位数字
手机号码:1开头 35789任意一个 后面接9位数字

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Java 中使用正则

相关类位于:java.util.regex 包下面
类:Pattern:
类:Matcher

		// 表达式对象
		Pattern p = Pattern.compile("\\w+");

		// 创建Matcher对象
		Matcher matcher = p.matcher("dslfjsdalfjdsl");
		Matcher matcher2 = p.matcher("dslfjsda&&lfjdsl");
		
		// while (matcher2.find()) {
			// System.out.println(matcher2.group());
		// }

		System.out.println(matcher.matches()); // true // matches 匹配整个区域
		System.out.println(matcher2.find()); // true 该方法扫描输入的序列,查找与该模式匹配的下一个序列 也就是说,这一次find 查找的是dslfjsda 
		// System.out.println(matcher.group()); // 返回查找到的序列
		System.out.println(matcher2.find()); // true 这一次 找到的是 lfjdsl
		System.out.println(matcher2.find()); // false 这一次 没有找到下一个子序列了

		// 表达式对象
		Pattern p = Pattern.compile("[0-9]");

		// 创建Matcher对象
		Matcher matcher = p.matcher("dslf123jsdalf44jdsl544");
		
		// 把所有数字替换为 #
		String replaceAll = matcher.replaceAll("#");
		System.out.println(replaceAll); // dslf###jsdalf##jdsl###

单词分词器

		String str = "fjsld flJJd fdsf  ds.1998 (now) lfjsdl jljlk jj? .";
		Pattern p = Pattern.compile("\\b[0-9A-Za-z]+");
		Matcher matcher = p.matcher(str);
		while (matcher.find()) {
			System.out.println(matcher.group());
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值