第五章 Java API(九)

5.6正则表达式

5.6.1元字符

       正则表达式是由普通字符(如字符a -z)和特殊字符(元字符)组成的文字模式。元字符是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

常见的正则表达式元字符如表5-15所示。

表5.15 常见的正则表达式元字符
元字符功能描述
\转义字符,例如"\n"匹配"\n"
^正则表达式的开头标志
$正则表达式的结尾标志
*匹配零次或多次
+匹配一次或多次
匹配一次或零次
.匹配任意字符
{n}

匹配n次

{n.}至少匹配n次
{n.m}n<=m,最少匹配n次,最多匹配m次
x|y|匹配x或者y
【xyz】字符集合,匹配所包含的任意一个字符
【a-z】字符范围,匹配指定范围内的任意字符
【^a-z】负值字符范围,匹配任何不在指定范围内的任意字符
【a-zA-Z】匹配a~z到A~Z
【a-z】字符范围,匹配指定范围内的任意字符
\d匹配数字1-9
\D匹配非数字字符
\s

匹配空白字符

\S匹配非空白字符
\w匹配单词字符与数字0~9
\b单词边界
\B非单词边界
\A输入的开头
\G上一个匹配的结尾
\Z输入的结尾,仅用于最后的结束符(如果有的话)
\z输入的结尾
\b单词边界

5.6.2  Pattern类和Matcher类

        Java正则表达式通过java.util.regex包下的Pattern类和Matcher类实现,所以要想使用正则表达式,首先要学会这两个类的使用方法,下面分别对这两个类进行详细讲解。

1.Pattern类

       Pattern类用于创建一个正则表达式,也可以说,创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式,具体代码如下:

Pattern p=Pattern.compile("\\w+");

       Pattern在正则表达式的应用比较广泛,所以灵活使用Pattern类是非常重要的,下面介绍Pattern类的常用方法,如表5.16所示

表5.16 Pattern类的常用方法
方法声明功能描述
split(CharSequence input)将给定的输入序列分成这个模式的匹配
Matcher matcher(CharSequence input)提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持
Static boolean matches (String regex,CharSequence input)翻译给定的正则表达式,并尝试匹配给定的输入

下面通过一个案例来学习Pattern类的常用方法                                                                        

import java.util. regex .Matcher;

import java.util. regex. Pattern;

public class Example28 (

   public static void main (String[] args) (

      Pattern p=Pattern. compile ("\\d+") ;

      String[] str-p.split (“我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa. com") ;

      System.out.println ("是否匹配Pattern的输入模式"+

      Pattern. matches ("\\d+", "2223") ) ;

      System.out .println ("是否匹配Pattern的输入模式"+

      Pattern. matches ("\\d+", "2223aa") ) ;

      Matcher m=p. matcher ("22bb23") ;

      System. out .println ("返回该Matcher对象是由哪个Pattern对象创建的,即p为: "+ m.pattern () ) ;

      System. out .print ("将给定的字符串分割成Pattern模式匹配为: ") ;
      }
   }
}

运行结果→

是否匹配Pattern的输入模式true
是否匹配Pattern的输入模式false
返回该Matcher对象是由哪个Pattern对象创建的,即p为:\d+
将给定的字符串分割为Pattern模式匹配为:我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa. com

2.Matcher类

Matcher类用于在给定的Pattern实例的模式控制下进行字符串的匹配工作,同理,Matcher的构造方法也是私有的,不能直接创建,只能通过Pattern matcher(CharSequence input)方法得到该类的实例。下面介绍Matcher类的常用方法。

表5.17 Matcher类的常用方法
方法声明功能描述
boolean Matches()对整个字符串进行匹配,只有整个字符串都匹配才返回true
boolean lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
boolean find()对字符串进行匹配,匹配到的字符串可以在任何位置
int end()返回最后一个字符匹配后的偏移量
string group()返回匹配到的子字符串
int start()返回匹配到的子字符串在字符串中的索引位置

下面通过一个案例来学习Matcher类的常用方法。

import java.util. regex .Matcher;

import java.util . regex. Pattern;

public class Example29{

   public static void main (String[l args) {
      Pattern p-Pattern. compile ("\\d+") ;

      Matcher m-p.matcher ("22bb23") ;

      System. out.println ("字符串是否匹配:"十m.matches ( ) ;

      Matcher m2-p.matcher ("2223") ;

      System. out .println ("字符串是否匹配:"+ m2 .matches ( ) ;

      System.out.printin("对前面的字符串匹配结果内"十m. lookingAt () ) ;Matcher m3-p .matcher ("aa2223") ;

      System. out .println ("対前面的字符串匹配结果内: "+m3. lookingAt ( ) ;m.find();//返回true

      System. out .println ("字符串任何位置是否匹配:"+ m.find () ) ;

      m3.find () ;//返回true

      System.out .println ("字符串任何位置是否匹配:"+ m3. find () ) ;Matcher m4=p .matcher ("aabb") ;

      System.out.println ("字符串任何位置是否匹配:"+ m4.find () ) ;Matcher ml-p.matcher ("aaa2223bb") ;

      m1.find ();//匹配2223

      System.out println ("上一个匹配的起始索引:"+ m1.start () ) ;system.out.println ("最后一个字符匹配后的偏移量:"十ml.end () ) ;system.out.println ("匹配到的子字符串:"+ ml .group ()) ;
   }
}

运行结果→

字符串是否匹配:false

字符串是否匹配: true

对前面的字符串匹配结果为: true

对前面的字符串匹配结果为:false

字符串任何位置是否匹配:false

字符串任何位置是否匹配:false

字符串任何位置是否匹配:false

上一个匹配的起始索引:3

最后一个字符匹配后的偏移量:7

匹配到的子字符串:2223

5.6.3 String类对正则表达式的支持

String类提供了3个方法支持正则操作。如图

表5.18 String类支持正则操作的方法
方法声明功能描述
boolean matches(String regex)匹配字符串
String replaceAll(String regex,String replaceAll)字符串替换
String[]split(String regex)字符串拆分

下面通过一个案例学习方法

public class Example30{

   public static void main (String[] args){

      String str= "A1B22DDS34DSJ9D". replaceA11 ("\\d+","_") ;
      System. out .println ("字符替换后为: "+str) ;
      booleante ="321123as1".matches("\\d+");
      System. out.println("字符串是否匹配: "+te);
      String s []="SDS45d4DD4dDS88D" .split ("\\d+");
      System. out. print ("字符串拆分后为: ") ;
      for (int i=0;i<s.length;i++){
         System.out.print(s[i]+"");
      }
   }
}

运行结果→

字符替换后为: A_B_DDS_ DSJ_D

字符串是否匹配: false

字符串拆分后为: SDS d DD dDs D

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值