正则表达式

一.标准字符集合

1.普通字符: 字母,数字,汉字,下划线,没有特殊定义的标点符号

2.转义字符

\n换行符
\t制表符
\\\本身
\^,\$,\+,\?, \(, \), \*等

这些字符本身

3.标准字符集合: 能够与多种字符匹配的表达式

 !!!注意区分大小写,大写是相反的意思

\d任意数字   *(\d\d匹配任意两位数字)
\w任意 数字, 字母(包括大小写), 下划线
\s任意 空白字符(空格,制表符,换行符)
.任意 字符(不包括换行符)  
*[\s\S]任意 字符

二.自定义字符集合

[],匹配括号内任意一个字符

[ab5@]匹配a/b/5/@
[^abc]匹配abc之外的任意一个字符
[f-k]匹配f-k之间任意一个字符
[^0-3a-f]匹配0-3和a-f之外的任意一个字符

* 除^ -外, 正则表达式中的特殊符号, 在[]内失去特殊意义.

*标准字符集合, 除小数点外,如果包含在[]内,则自定义字符集合包括该集合

  eg. [\d.\-+]   匹配: 数字, 小数点, -, +

三.量词

{n}表达式重复n次\d{6}  匹配任意六位数字
{m,n}表达式至少重复m次, 最多重复n次      *首先匹配最多位, 后加?先匹配最少位

\d{3,5}?  匹配3/4/5位的数字,优先匹配3位  

{m,}表达式至少重复n次(没有最多多少次的写法) 
?匹配表达式0次/1次,相当于{0,1}a\d{0,1}b = a\d?b  ab之间有1个数字/ 仅ab
+表达式出现至少1次, 相当于{1,}a\d+b  ab之间至少有一个数字
*表达式不出现/出现任意次, 相当于{0,} 

四.字符边界(匹配位置,零宽)

^与字符串开始的方匹配^i  若字符串第一个字母为i,则匹配
$与字符串结束的地方匹配i$
\b

匹配一个单词边界

前面的字符和后面的字符不全是\w

hwz\b   匹配hwz,且z后不为\w

\bhwz   匹配hwz,且h前不为\w

五.匹配模式

IGNORECASE   忽略大小写

SINGLELINE     单行模式: 将整个文本看做一个字符串

MULTILINE    多行模式,每一行都是一个zifuchuan   eg.^i  匹配每一行开头的i   (若只想匹配第一个则: \Ai)

六.选择符和分组

|或的关系ab|bc  匹配ab或bc
()捕获组根据每个括号(的次序,从1开始为每一对括号进行编号

([a-z]{2})\1     ()内为捕获组,捕获两个连续连个字母,\1代表第一个捕获组

                        ==>捕获ABAB式字母

(?:表达式)

非捕获组

一些表达式中不得不使用(), 但又不需要保存()中匹配的内容 

六.预搜索(零宽断言): 只进行子表达式的匹配, 其本身不计入最终的匹配结果

(?=exp)位置后面能匹配表达式exp[a-z]+(?=\d+)  匹配所有后面带数字的单词, 不包括数字本身
(?!exp)位置后面不能匹配表达式exp

[a-z]+(?!\d+)   后面不为数字的单词  *若abc3, 匹配ab

(?<=exp)位置前面能匹配表达式exp 
(?<!exp)位置前面不能匹配表达式exp 

七.正则表达式在不同软件中的使用

1.数据库:   select * from tablename where 列名 REGEXP '正则表达式';

2.java中使用正则表达式

@Test
	public void test3() {
		//表达式对象 
		Pattern p=Pattern.compile("([0-9]+)([a-z]+)");
		//创建matcher对象
		Matcher m=p.matcher("djf32dsd24hh5nn66j544");
		
		while(m.find()) {			//查找下一个符合的字符串,若存在返回true
			System.out.println(m.group());       //返回当前查找的字符串
			System.out.println(m.group(1));		//group()内的数字代表捕获组分组的编号
			System.out.println(m.group(2));
		}
		
		//替换
		String newstr=m.replaceAll("*");
		System.out.println(newstr);
		
		//分割字符串使用正则表达式
		String s="dfdf443jjj45nin232jfid";
		String str[]=s.split("[\\d]+");    //将字符串以数字为边界分割
		System.out.println(Arrays.toString(str));
	}

运行结果:    

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值