正则小记

经常使用到正则,没想到都这么熟了有时候还要翻资料,这里小小记录下下。

正则并不难,关键是多练,其实老实来说正则的性能并不是很高,关键是多练。以下要背熟于心,不要给我说用到的时候再百度一下什么的:

字符 意义
|转义,匹配有意义字符的本身时使用(一些程序自带转义要多打一个,不解释)
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^abc] 匹配除了abc这几个字母以外的任意字符
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

上面只是最最最基本的,最常用的,想用点高级功能可以再去找资料。这里给点示例代码

先是javaScript里面使用正则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//场景1:只需要得到是否匹配,使用test
var result = /MSIE [\w.]+/.test('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BTRS124307)');
if(result ){
alert('ie');
}
else{
alert('不匹配');
}

//场景2:除了要知道是否匹配,还要提出字符串
var result = /(MSIE) ([\w.]+)/.exec('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BTRS124307)');
if(result ){
console.log(result[1]);
console.log(result[2]);
}else{
alert('不匹配');
}

然后是正则在java中使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String [] args){
String regexp="(MSIE) ([\\w.]+)";
String teststr="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BTRS124307)";
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(teststr);
if(matcher.find()){
System.out.println("匹配到了"+matcher.group(0));
int length=matcher.groupCount();
System.out.println("共匹配" + length + "处");
for(int i=1;i<=length;i++){
System.out.println("从第 "+i+" 个位置抽取到了"+matcher.group(i));
}
}else{
System.out.println("不匹配");
}
}

开发正则表达式一般写上去就不管了,过几天再看就感觉不明所以,而且开发时通常都写死在代码里,所以写的时候一定要注释用途,如果可以也要注释具体规。