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

 ------- 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     

      }

}


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

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);
             }
      }
}

/*打印结果:

zhangsan

lisi

wangcai

*/

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());
             }
      }
}

/*

打印结果:

abc

ppp

opo

oe4

eee

iii

*/



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值