java和正则表达式

 
在编程过程中,我们经常需要围绕字符串展开一些处理,如搜索子串,验证,替换文本等操作,而正则表达式恰好为我们做这些处理进行了大大的简化,而本文将介绍如何使用正则表达式在java中进行字符串的处理。
通常来讲,进行正则表达式操作需要这么两个步骤。
创建java.util.regex. Pattern对象。方法如下:
         Pattern  pattern=Pattern.compile(String matStr)
         其中matStr是正则表达式,返回的结果patter为编译之后的正则表达式。
创建java.util.regex. Matcher对象。方法如下
         Matcher  matcher=pattern.matcher(String str)
         其中str是进行搜索的字符串,返回的Matcher对象可以对分析结果进行解析。
下面用一个简单的例子来看一下:在这个例子中我们将查询字符串中的字串,并且用^将查询结果表示出来:
/**
          * 最基础的正则表达式处理
          * 查找字符串中的子串
          * str是搜索字符串
          * matStr是正则表达式
          */
         public void findSubString(String str,String matStr){
                   char[] cArr=str.toCharArray();
                   char[] cArrMat=new char[str.length()];
                  
                   Pattern pattern=Pattern.compile(matStr);
                   Matcher matcher=pattern.matcher(str);
                   while(matcher.find()){
                            //System.out.println(matcher.start()+"--"+matcher.end());
                            for(int i=matcher.start();i<matcher.end();i++){
                                     cArrMat[i]='^';
                            }
                   }
                   System.out.println("findSubString的执行结果:");
                   System.out.println(cArr);
                   System.out.println(cArrMat);
         }
调用时:new Test().findSubString("hsshdhasoasdhasd", "h.s");结果如下:
findSubString 的执行结果 :
hsshdhasoasdhasd
^^^ ^^^     ^^^
结果是字符串中 h 开头 s 结尾且中间只有一个字符的子串被标示了出来。
通过上面的例子我们知道了如何在 java 中使用正则表达式,下面将给出一些常用的正则表达式字符集
       定义字符集
           [aeiou]         任意方括号之间的字符都可以进行匹配
           [^aeiou]        表示除了方括号之间^右面的任意字符
           [a-e]     封闭范围,表示从a到e之间的所有字符
           [a-eA-F1-9]   a到e,A到F,1到9的字符
           &&       逻辑与  如[a-e&&[^aeiou]]a-e除了aeiou
           |   逻辑或      [H|h][aeiou]d 以H或h开头,中间为aeiou,结尾为d
           
           预定义字符
           .   代表任意字符
           /d 代表数字。即[0-9]
           /D         非数字的任意字符[^0-9]
           /s 任意空白字符
           /S 任意非空白字符[^/s]
           /w         大小写字母,数字,下划线[a-zA-Z_0-9]
           /W        [^/w]
           
           匹配边界,比如查找非内嵌的单词
           ^ 指定起始行      在每一行的开始查找单词java       ^java
           $ 指定行的结束          在每一行的末尾查找单词java       java$
           /b 单词的边界      查找h开始,d结尾的单词               //bh.d//b
           /B          非单词的边界
           /A          指定被搜索字符串的起始      为找到位于搜索字符串起始位置的单词The //AThe//b
           /z 指定被搜索字符串的末尾      为了在字符串末尾找到后面是句号的单词good          //bgood//z
           /Z 除了最后终止符以外的输入结尾
           
           量词的使用          如何重复使用子串
           + 表示一个或多个      //d+ 任意整数序列
           ?只可能发生一次或者根本就不发生 //d+(//.//d+)? 小数2.25
           * 出现零次或者更多次      //d+(//.//d*)? 2.
通过这些字符集,我们可以对字符串进行随心所欲的处理。
再举个简单的例子,对某个字符串进行验证:
/**
          * 匹配验证整个字符串
          *
          */
         public void matchString(String str,String matStr){ 
                   Pattern pattern=Pattern.compile(matStr);
                   Matcher matcher=pattern.matcher(str);
                   System.out.println("matchString的执行结果:");
                   if(matcher.matches()){
                            System.out.println("验证成功!");
                   }else{
                            System.out.println("验证失败!");
                   }
         }
下面我们要验证一下某个字符串是否是由小写字符组成的
new Test().matchString("ashdk", "[a-z]+");
从字符串中获取数字元素
public void easy(String str,String matStr){
                   Pattern pattern=Pattern.compile(matStr);
                   Matcher matcher=pattern.matcher(str);
                   System.out.println("easy的执行结果:");
                   while(matcher.find()){
                            System.out.println(matcher.group());
                   }
         }
调用执行:new Test().easy("ad45sdas2.5sd45.a.2sdd","//d+(//.//d*)?");
或者按照我们自己的意愿对字符串进行分割:
/**
          *切分字符串,按照空格,逗号,句号分割
          */
         public void splitString(String str){
                   String matStr="//s+|//.//s*|//,//s*";
                   String[] tokens=str.split(matStr);
                   System.out.println("splitString的执行结果:");
                   for(int i=0;i<tokens.length;i++){
                            System.out.println(tokens[i]);
                   }
         }
调用执行:new Test().splitString("asd sad,asd.asd adasd.");
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值