1 正则表达式的基本原理
- 正则表达式是对字符串进行操作的
- 正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
- 正则表达式经常被用来检索,匹配,修改符合一定规则的字符串。
- 正则表达式的优点:
- 用一些特定的符号代替一些代码操作,这样可以简化书写。
- 可以迅速地用极简单的方式达到字符串的复杂控制。
- 灵活性、逻辑性和功能性非常的强。
- 学习要点:
- 正则表达式是就是在学习一些特殊符号的使用。
- 学习字符串的匹配,切割,替换,获取。
2 字符串的匹配
下面列举了一些常用的匹配
[abc] 表示一个字符串只能有一个字符,他可以是a,b,c中的一个 [abc][a-z] 第一个字符如上,第二个字符是a到z中的一个 [^abc]除了abc的以外的字符 [a-zA-Z] a-z大小写都行 \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] X? 表示有一个或者一个也没有 X+ 表示一次或多次 X* 表示零次或多次 X{n} 恰好n次 X{n,} 至少n次 X{n,m} 至少n次,最多m次
- 如果需要更多的匹配规则,请查阅文档java.util.regex.Pattern
具体的使用方法(java.lang.String.matches())
定义一个字符串
String str="235467";
定义一个匹配规则
//这个正则表达式表示第一个字符是1到9,以后的字符是0到9,但是最多14位,最少4位 String regex="[1-9][0-9]{4,14}";
进行匹配
//加入不能符合规则返回false,能符合规则则返回true,下面明显返回true; str.matches(regex);
3 字符串的切割
- 要点
- 主要用到java.lang.String.split()
- 返回的是一个数组
实例
把一个带空格的字符串截取成一个字符串数组
String str="ni shi wo de yan"; //这个匹配规则表示切割的是一个或多个空格 String regex=" +" String[] arr=str.split(regex); //得到的结果就是arr[0]="ni",arr[1]="shi",arr[2]="wo", arr[3]="de",arr[4]="yan"
一个要点
str.split("(.)\\1") (.) 表示第一个词是一个匹配任意字符的组。一个规则被编为一个组,每个组都有一个编号,想要使用这个组可以通过\n的形式来提取,n代表的组的编号。 \1 表示匹配第一个词,多加一个\,是为了转义。
4 替换
- 要点
- 主要用到java.lang.String.replace(regex,replacement)
- 可以把一个字符串中字符或字符串转换成你想要替换的东西
实例
把一个字符串中的叠词替换成一个字符
String str="abcdddefffffghhijjkk" //这个匹配规则表示两个及两个以上相同的字符 String regex="(.)\\1+"; String str1=str.replace(regex,"$1"); //用$符获取前面组的内容,这句话的内容是表示表叠词都变为一个词 //运行后的结果是str1="abcdefghijk";
5 获取(获取特定的字符串)
- 是把符合规则的取出来
步骤:
String reg="\\b[a-z]{3}\\b"; \b表示单词边界 String str="ming tian jiu yao fang jia le ,da jia." 1. 将规则封装成类的对象 Pattern p= Pattern.compile(reg); 2. 让正则对象和要作用的字符串进行关联 Matcher m= p.Matcher(str); //实际上String的matches的方法用的就是以上两种的结合,是他们的封装 3. 进行匹配 // System.out.println(m.matcher());//返回的是boolean型的 while(m.find()) { System.out.println(m.group()); //要先find,再group; }