常用正则表达式

一只纯菜鸟的角度....

在用schema规范xml时,有些约束要用到正则表达式,我却写不出来。作为一个有节操的程序猿,这是难以忍受的。所以我这里总结下正则表达式。查阅的是08年的文档,步骤应该算是比较,但不知道是不是过时了,哪位大侠知道更好的办法欢迎指教哈。在JDK1.6的帮助文档中查询patter类,摘抄一小段内容(其实API正的很好用)如下:

Patter指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。

因此,典型的调用顺序是

 Pattern p = Pattern.compile("a*b");

 Matcher m = p.matcher("aaaaab");

 boolean b = m.matches();

仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句

 boolean b = Pattern.matches("a*b", "aaaaab");

等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。

此类的实例是不可变的,可供多个并发线程安全使用Matcher类的实例用于此目的则不安全。

------------------------------------------------

以上摘抄的内容何解呢?上面的三个步骤构成一个完整的匹配正则表达式的过程,可以多个供多个并发线程安全使用。而你只简单的写一句boolean b = Pattern.matches("a*b", "aaaaab");

的话,在多线程并发时会出现不安全的问题。不懂........

 

正则表达式的强大我就不废话,开始实例吧

 

publicclass TestZhengZe {

   

    publicstaticvoid main(String[] args) {

        Pattern p=null;//正则表达式

        Matcher m=null;//操作的字符串

        boolean result=false;//结果

        //匹配手机号码 第一位为1,第二位为3或者5,后面9位数

//      p=Pattern.compile("^[1][3,5]\\d{9}");

//      m=p.matcher("15200399866");

//      result=m.matches();

//      if(result){

//          System.out.println("输入手机号正确");

//      }else{

//          System.out.println("输入手机号错误");

//      }

       

        //身份证

        //p=Pattern.compile("\\d{15}|\\d{18}");

       

        //邮箱

    //  p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");

       

        //ip

    //  p =Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");

       

        //汉字字符串

        //p = Pattern.compile("^[\u4e00-\u9fa5]+$");

       

       

        //匹配电话号码0735-2599991或010-87654673 区号固定,号码是7位或者8位

        p=Pattern.compile("0735-\\d{7,8}|010-\\d{7,8}");

        m=p.matcher("010-2599991");

        if(m.matches()){

            System.out.println("OK");

        }else{

            System.out.println("xxxx");

        }

    }

}

 

还有些字符串的匹配,待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值