加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

常用正则表达式

发布时间:2020-12-13 19:47:47 所属栏目:百科 来源:网络整理
导读:一只纯菜鸟的角度 .... 在用 schema 规范 xml 时,有些约束要用到正则表达式,我却写不出来。作为一个有节操的程序猿,这是难以忍受的。所以我这里总结下正则表达式。查阅的是 08 年的文档,步骤应该算是比较 , 但不知道是不是过时了,哪位大侠知道更好的办

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

在用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}");

//汉字字符串

//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");

}

}

}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读