一只纯菜鸟的角度....
在用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");
}
}
}
还有些字符串的匹配,待续