android开发之正则表达式

来源:互联网 发布:超级淘宝txt下载 编辑:程序博客网 时间:2024/05/08 06:43

正则表达式对于很多的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());}


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



0 0
原创粉丝点击