android开发之正则表达式

正则表达式对于很多的android开发人员来说,并不是那么熟练,对于web开发人员来说,可能用得要多一些。最近公司的项目也用到了正则表达式,用于匹配表情、股票、@好友等信息。今天有必要将正则表达式的知识点总结一下,对于我来说,正则表达也就是刚入门的水平。

所谓正则表达式,说白了就是用于匹配字符串的工具。

而我今天要讲的主要是从五个方面进行介绍。

1. 正则表达式的基础语法。

2. 匹配。

其实使用的是String类中的matches方法。

3. 分割。

其实使用的String类中的slipt方法。

4. 替换。

其实使用的就是String类中的replaceAll方法。

5. 获取。

将字符串中符合规则的都取出来。 
需要用到正则表达式对象。 

我们就从以下几个方面进行讲解。

一、正则表达式的基础语法

我学习正则时,主要是参考了JDK_API_1_6_zh_CN文档,我会在博客结尾处,提供下载。这一块的东西实在是太多了。我只能挑个说一下了。

<span style="font-family:Microsoft YaHei;">字符 
x 字符 x 
\\ 反斜线字符 
\0n 带有八进制值 0 的字符 n (0 <= n <= 7) 
\0nn 带有八进制值 0 的字符 nn (0 <= n <= 7) 
\0mnn 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7) 
\xhh 带有十六进制值 0x 的字符 hh 
\uhhhh 带有十六进制值 0x 的字符 hhhh 
\t 制表符 ('\u0009') 
\n 新行(换行)符 ('\u000A') 
\r 回车符 ('\u000D') 
\f 换页符 ('\u000C') 
\a 报警 (bell) 符 ('\u0007') 
\e 转义符 ('\u001B') 
\cx 对应于 x 的控制符 
  
字符类 
[abc] a、b 或 c(简单类) 
[^abc] 任何字符,除了 a、b 或 c(否定) 
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) 
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) 
[a-z&&[def]] d、e 或 f(交集) 
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) 
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) 
  
预定义字符类 
. 任何字符(与行结束符可能匹配也可能不匹配) 
\d 数字:[0-9] 
\D 非数字: [^0-9] 
\s 空白字符:[ \t\n\x0B\f\r] 
\S 非空白字符:[^\s] 
\w 单词字符:[a-zA-Z_0-9] 
\W 非单词字符:[^\w] </span>
其中在正则里边.表示任何字符。\w表示单词字符,字符范围[a-zA-Z_0-9]。在字符串使用\时,应该是对于双\\。比如匹配数字"\\d"而不是"\d"。

二、匹配

下面提供几个例子:

1. 匹配qq号。要求:全为数字,长度为5-15位,不能以0打头。

regex:[1-9][0-9]{4,14}


2. 指定字符串是由一个字符串组成的,要么a、要么c。

regex:[ac]


3. 第一个字母和最后字母是固定的b和k,中间有多个o,或者中间出现多个相同字符。

regex:bo*k(b[a-zA-Z]+k)


4. 检查手机号。

regex:1[3578][0-9]{9} (1[3578]\\d{9})


三、分割

使用字符串方法split进行分割
1. 使用点.分割"aaa.bb.cc"字符串
如果是这样的话,是切不出来的。因为.在正则里边表示任意字符。那我们需要将正则的点.。转成普通字符的点。"\\."

2. 使用叠词进行分割。eg:sdfaadefggggwfoooolw
要解决这个问题,就需要用到组的概念了。使用组的目的在于复用。这个题的答案:"(.)\\1+"。(.)表示任意字符为一组,\\1表示复用组,其中1表示标号。组的标号是从1开始的。
比如((A)(B(C)))其实表示四个组。关键是看左括号,标号是从1开始的。

3. "99 12    34 5 -98" 将数字分割出来。
regex: " +"


四、替换

其实使用的就是String类中的replaceAll方法。
1. 将字符串"sdfaadefggggwfoooolw"中的叠词,替换成#
str.replaceAll("(.)\\1+", "#");

2. 将字符串"sdfaadefggggwfoooolw"中的叠词替换成叠词的第一个字符。

str.replaceAll("(.\\1+)", "$1"); 在第二个参数中要使用第一个组的话,可使用$标号的方式。


3. 在一些后天管理系统中要屏蔽敏感词

String str = "我的手机号:18001358078,我的qq号:303819511";把手机号、qq号中间添加***这中字符。

String s = str.replaceAll("(\\d{2})\\d+(\\d{2})","$1**$2" )


五、获取

在字符串中获取条件的字符串都取出来。需要用到正则表达式对象。
String str = "da jia hao, ming tian bu fang jia,xie xie!";
// 由具体的正则表达式生成模式对象
Pattern p = Pattern.compile("\\b[a-zA-Z]{3}\\b");
// 使用模式对象对原字符序列进行匹配
Matcher macher = p.matcher(str);
while(macher.find()){
	System.out.println(macher.group());
}


文中说到的中文文档可点击:下载



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值