黑马程序员:正则表达式

---------------------- android培训java培训、期待与您交流! ----------------------

正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。

作用:用于专门操作字符串

特点:用一些特定的符号表示一些代码操作。

好处:简化对字符串的复杂操作

 

具体操作功能

1. 匹配

对应String类中的matches()方法,用于判断字符串是否匹配某个正则表达式

 

2. 切割

对应String类中的splite()方法,使用某个正则表达式所表示的内容作为分隔符对字符串进行切分,切分口的内容不包含分隔符。

特别需要注意的是,不能直接用”.”作为分隔符,因为”.”在正则中代表任意字符,如果非要使用”.”作为切割符,在JAVA中要表示为”\\.” 其中紧跟着”.”的反斜杠代表”.”不是正则表达式中的”.”,再前面的反斜杠是对第二个反斜杠的转译。同理,如果以”\”作为分隔符,则要使用”\\”,例如要对字符串String s1= “c:\\abc\\a.txt”根据”\\”进行切割,那么正则表达式就要写成”\\\\”。

 

3. 替换

对应String类中的replaceAll()方法, 将字符串中符合某种正则的部分替换成另外的一个字符串。

如果要使用替换,就要先弄清楚组的概念

组:用()括起来的规则,称为捕获组,组在形成的时候会自动生成编号,从1开始,在同一个正则表达式中,形成了捕获组之后,后面的表达式中可以使用\N来重复使用前面定义的组规则。

比如,有字符串str = ”aedgkkkkksdfewiicgsoooliiesoz”,要求按照字符串中的重复字母作为切割分来切分字符串的正则表达式就为

“(.)\\1+”,分析,先将”.”定义为一个捕获组,然后后面使用\\1表示重用第一组规则,之后加号表示\\1出现了至少1次

如果题目要求改为,去掉字符串中的重复字母,重复字母只保留一次,那么就要使用replaceAll方法了

str.replaceAll(“(.)\\1+”, “$1” )

 “$n”:获取前一个规则中的组n

 

4. 获取:将字符串中的符合规则的子串取出

操作步骤:

1.      将正则表达式封装成对象。

2.      让正则对象和要操作的字符串关联

3.      关联后,获取正则匹配引擎

4.      通过引擎对符合规则的子串进行操作,比如取出。

 

public static void get(){
		String str = "ming tian jiu yao fang jia le, da jia.";
		//规则:将源字符串中的由三个字母的组成的单词组成
		String reg = "\\b[a-zA-Z]{3}\\b";// "\\b"单词边界
		//将规则封装成对象
		Pattern p = Pattern.compile(reg);
		//让正则对象和要操作的字符串相关联。获取匹配器对象
		Matcher m = p.matcher(str);
		//将规则作用到字符串上,并执行匹配操作
		while(m.find()){//此方法返回一个boolean值,表示是否找到,另见 find(int i)方法,此方法规定匹配器从索引位置i开始向后进行匹配
			//获取匹配后的结果
			System.out.println(m.group());
			//获得与正则匹配的子串在原字符串的起始索引位置和结束索引位置
			System.out.println(m.start()+"..."+m.end());
		}
	}	

附:正则表达式中常用字符:

符类(校验一个位置上的字符)sdfsdf

[abc]

a、b 或 c(简单类)

[^abc]

任何字符,除了 a、b 或 c(否定)

[a-zA-Z]

a 到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]]

a 到 d 或 m 到 p

[a-z&&[def]]

d、e 或 f(交集)

[a-z&&[^bc]]

a 到 z,除了 b 和 c

[a-z&&[^m-p]]

a 到 z,而非 m 到 p

 

预定义字符类

.

任何字符(与行结束符可能匹配也可能不匹配)

\d

数字:[0-9]

\D

非数字: [^0-9]

\s

空白字符:[ \t\n\x0B\f\r]

\S

非空白字符:[^\s]

\w

单词字符:[a-zA-Z_0-9]

\W

非单词字符:[^\w]

 

Greedy 数量词

X?

X,一次或一次也没有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好 n

X{n,}

X,至少 n

X{n,m}

X,至少 n 次,但是不超过 m


边界匹配器

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

输入的结尾,仅用于最后的结束符(如果有的话)

\z

输入的结尾

 


---------------------- android培训java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值