Java正则表达式

重点前言

***一个正则表达式就是一个描述规则的字符串,可以适配任何语言
在Java中一个\表示转移字符,所以一般需要多加一个\
在[ ]内一些特殊的符号如果想在正则内存在,则需要使用\符号的形式让它转义,例如:[ \-];
正则中匹配到的字符会存在内存中
断言:编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。***

进入正题

一、正则基本符号
指定字符:可以匹配指定的字符;

. :匹配除了换行符以外的任意一个字符

*:可以匹配任意个字符(多个)==={0,} 等价于 *
	****匹配0至多个在它之前的字符。例如正则表达式“zo*”能匹配“z”以及“zoo”;正则表达式“.*”意味着能够匹配任意字符串。****

+:可以匹配至少一个字符(多个)==={1,} 等价于 +
	***匹配前面的子表达式一次或多次。例如正则表达式9+匹配9、99、999等。****

?:可以匹配零个或者一个字符==={0,1} 等价于 ?
	****匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。此元字符还有另外一个用途,就是表示非贪婪模式匹配,****
	***贪婪匹配:尽可能多的匹配字符;非贪婪匹配:以最底线的长度匹配字符;****************

\w:匹配一个字母或者数字或下划线
\W:与w效果相反(一个)

\s:匹配一个空白符(空格,TAB键)
\S:与s相反(一个)

\d:匹配一个数字(0~9)
\D:匹配一个非数字(和d效果相反)

\b :匹配单词的开始或者结束
\B:匹配非单词的开始或者结束

^:匹配字符串的开始,也可以指定字符串的开始是否符合标准:/^java*/,表示字符串开头是否是Java子串,用于[ ]内是表示相反的意思
$:匹配字符串的结束,也可以指定字符串的结尾是否符合标准:/*java$/,表示字符串的结尾是否是java子串。

二、修饰基本正则符号的表达式:
{n}:可以匹配N个字符,例如:“\d{6}”:匹配任意六个字符

{n,m}:可以匹配N~M个字符

{n,}:可以匹配至少N个字符

字符1 | 字符2:表示匹配字符1或者字符2

*************[   ]:可以匹配范围内的一个字符*****
*******在很多情况中,【 】会代替元字符的使用,比如:[a-z]就代替了\w[a-z]***********************
	1、[a-f]:  可以匹配范围内的一个字符
	2、[a-f0-9]:可以匹配a-f或者0-9中的一个字符
	3、[a-f0-9_]:可以匹配a-f或者0-9中的一个字符,并且要在任意位置上有一个_
	4、[^0-9]:匹配不是0-9范围内的字符
	5、分组表示匹配部分();---->捕获组,用括号括起来的部分就是正则中的一个部分,可以同样使用修饰符表达式。
	6、非捕获组(?:EXpression);---->让匹配到的内容不存放到内存中,会导致内容丢失,让后方的获取符获取不到。
	7、反向引用:\n[nn]
		***每一对()会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号,通过反向引用,可以对分组已捕获的字符串进行引用***
	8、零宽断言
		***只进行子表达式的匹配,匹配内容不计入最终的匹配结果,不放入内存,是对位置的匹配**********

		一、(?=exp):断言自身出现的位置的后面能匹配表达式exp
		二、(?<=exp):断言自身出现的位置前面能匹配表达式exp
		三、(?!exp):断言此位置的后买你不能匹配表达式exp
		四、(?<!exp):断言此位置的前面不能匹配表达式exp

三、正则表达式匹配:
一般可以先生成一个Pattern对象,再用这个对象去进行匹配
语法1:boolean b=Pattern.matches(pattern, String);----->用于少量判断
语法2:Pattern pattern=Pattern.compile(“正则表达式”);----->用于多量判断
pattern.matcher(“字符串”).matches();

语法3:String matches 方法
	String str ="az";
	String v ="[abcd][a-z]";
	boolean ans = str.matches(v);

四、正则表达式的提取:
一、创建一个Pattern的对象

Pattern compile1=Pattern.compile("[a-z]{4,6}@[a-zA-Z0-9]{4,6}(\\.[a-z]+){2}");

二、利用Matcher对象为后续Pattern对象和字符串进行比较和提取做准备

Matcher matcher1=compile1.matcher(name);

三、利用Matcher对象的find()方法和group([int])方法来得到匹配的字符

 while(matcher1.find()){
            System.out.println(matcher1.group());
        }

注意:正则的分组是以()为准的,如果没有()进行分割,则通过group()和group(int)得到的都是一个结果,是一个完整的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值