黑马程序员--- 正则表达式

来源:互联网 发布:原生js实现分页效果 编辑:程序博客网 时间:2024/06/04 18:54

 ------- android培训、java培训、期待与您交流! ----------


1什么是正则表达式

正则表达式就是具有一定规则的字符串,正则表达式是用操作字符串的。

正则表达式的规则:

如:

[123],表示某一位必须是123.

[a-zA-Z]表示某一位必须是AZ的大小写字母。

[a-m[q-z]]表示某一位必须是a-mq-z小写字母。

[a-z&&[^def]]表示某一位必须是a-z除了def.的小写字母。

[a-z&&[^l-q]]表示某一位必须是a-z除了l-q的小写字母。

[^012]表示某一位不能是012数字。

[a-z&&[def]]表示某一位只能是def小写字母。

预定义字符

\d表示0-9数字。

\D表示[^0-9]

\w表示[a-zA-Z_0-9]

\W表示不能是大小写字母,数字和下划线:[^\w]

\s表示空白字符

\S表示不能是空白字符:[^\s]

.表示任意字符。

注意:在使用下面有反斜线的表达式时,,因为反斜线属于转义字符,必须要再加上一个反斜线对其进行转意。如:

“\\d”.

 

边界匹配器

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

输入的结尾,仅用于最后的结束符(如果有的话)

\z

输入的结尾

Greedy 数量词

 

X?

X,一次或一次也没有

 

X*

X,零次或多次

 

X+

X,一次或多次

 

X{n}

X,恰好 n 次

 

X{n,}

X,至少 n 次

 

X{n,m}

X,至少 n 次,但是不超过 m 次

 

 

正则表达式是用来操作字符串的,可以进行以下几种操作:匹配、切割、替换、获取。

1, 匹配

调用String类的matches(String regex);方法,用字符串和指定的正则进行匹配。返回值为boolean,为true表示字符串和正则表达式相匹配,否则不匹配。

如:

 

定义匹配手机号的正则表达式:要求,第一位不能是0,第二位只能是3458

public class RegexDemo {      public static void main(String[] args) {             String regex="1[3458]\\d{9}";             String str="13834530020";             System.out.println(str.matches(regex));//true           }}

匹配用户名:要求,不能以数字开头,必须是515位。

public class RegexDemo {      public static void main(String[] args) {             String regex="[^\\d][\\w]{4,14}";             String str="michlejackson";             String str1="00abcdef";             System.out.println(str.matches(regex));//true             System.out.println(str1.matches(regex));     //false                   }} 

2, 切割

调用String类中的String[] split(String regex);方法对字符按指定的正则表达式进行切割,返回一个字符串数组。

如:

public class RegexDemo {      public static void main(String[] args) {//将包含不固定数量空格的姓名字符串,将空格去除。             String str="zhangsan      lisi  wangcai";             String regex=" +";//表示空格数出现一次或多次。             String [] arr=str.split(regex);             for(String s:arr){                    System.out.println(s);             }      }}/*打印结果:zhangsanlisiwangcai*/public class RegexDemo {      public static void main(String[] args) {             //将姓名字符串中的字线去除。             String str="张三ooooooo李四bbbbb旺财";             String regex="(.)\\1+";//将任意字符定义为组,第二位使用重复第一组内容,重复一次或多次。             String [] arr=str.split(regex);             for(String s:arr){                    System.out.println(s);             }      }}/*打印结果:张三李四旺财*/

3,替换

调用 String类中的replaceAll(String regex,String str);用指定的字符串,替换匹配指定正则表达式的字符串。

如:

public class RegexDemo {       public static void main(String[] args) {             //将姓名字符串中的一人叠词替换多个叠词。             String str="张三ooooooo李四bbbbb旺财";             String regex="(.)\\1+";//将任意字符定义成组,第二位重复第一位的内容,重复多次。             str=str.replaceAll(regex, "$1");//$1表示,使用第一组的内容。             System.out.println(str);      }}/*打印结果:张三o李四b旺财*/

4,获取

要获取匹配正则表达式的字符串,需要调用Matcher对象中的group()方法,所以这里可以先将正则表达式封装成Pattern对象,再通过此对象的matcher(String str)方法,获取Matcher对象。

如:

import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexDemo {      public static void main(String[] args) {                          //获取字符串中三个字母的字符串。             String str="abc fafa afaei ppp opo ip oopp oe4 33 eee iii";             Pattern  p=Pattern.compile("\\b[a-z0-9]{3}\\b");             Matcher m=p.matcher(str);             while(m.find()){                    System.out.println(m.group());             }      }}/*打印结果:abcpppopooe4eeeiii*/



0 0