正则表达式对于很多的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})
三、分割
四、替换
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());
}
文中说到的中文文档可点击:下载