String[] dataArr = { "ban", "ben", "bin", "bon" ,"bun","byn","baen"}; for (String str : dataArr) { String patternStr="b[aeiou]n"; boolean result = Pattern.matches(patternStr, str); if (result) { System.out.println("字符串"+str+"匹配模式"+patternStr+"成功"); } else{ System.out.println("字符串"+str+"匹配模式"+patternStr+"失败"); } }
注:方括号中只允许的单个字符,模式“b[aeiou]n”指定,只有以b开头,n结尾,中间是a,e,i,o,u中任意一个的才能匹配上,所以数组的前五个可以匹配,后两个元素无法匹配.
方括号[]表示只有其中指定的字符才能匹配.
实例四:
String[] dataArr = { "been", "bean", "boon", "buin" ,"bynn"}; for (String str : dataArr) { String patternStr="b(ee|ea|oo)n"; boolean result = Pattern.matches(patternStr, str); if (result) { System.out.println("字符串"+str+"匹配模式"+patternStr+"成功"); } else{ System.out.println("字符串"+str+"匹配模式"+patternStr+"失败"); } }
如果需要匹配多个字符,那么[]就不能用上了,这里我们可以用()加上|来代替,()表示一组,|表示或的关系,模式b(ee|ea|oo)n就能匹配been,bean,boon等.
因此前三个能匹配上,而后两个不能.
实例五:
String[] dataArr = { "1", "10", "101", "1010" ,"100+"}; for (String str : dataArr) { String patternStr="\d+"; boolean result = Pattern.matches(patternStr, str); if (result) { System.out.println("字符串"+str+"匹配模式"+patternStr+"成功"); } else{ System.out.println("字符串"+str+"匹配模式"+patternStr+"失败"); } }
注:从前面可以知道,\d表示的是数字,而+表示一次或多次,所以模式\d+就表示一位或多位数字.
因此前四个能匹配上,最后一个因为+号是非数字字符而匹配不上.
实例六:
String[] dataArr = { "a100", "b20", "c30", "df10000" ,"gh0t"}; for (String str : dataArr) { String patternStr="\w+\d+"; boolean result = Pattern.matches(patternStr, str); if (result) { System.out.println("字符串"+str+"匹配模式"+patternStr+"成功"); } else{ System.out.println("字符串"+str+"匹配模式"+patternStr+"失败"); } }
模式\w+\d+表示的是以多个单字字符开头,多个数字结尾的字符串,因此前四个能匹配上,最后一个因为数字后还含有单字字符而不能匹配.
实例七:
String str="薪水,职位 姓名;年龄 性别"; String[] dataArr =str.split("[,\s;]"); for (String strTmp : dataArr) { System.out.println(strTmp); }
String类的split函数支持正则表达式,上例中模式能匹配”,”,单个空格,”;”中的一个,split函数能把它们中任意一个当作分隔符,将一个字符串劈分成字符串数组.
实例八:
String str="2007年12月11日"; Pattern p = Pattern.compile("[年月日]"); String[] dataArr =p.split(str); for (String strTmp : dataArr) { System.out.println(strTmp); }
Pattern是一个正则表达式经编译后的表现模式 ,它的split方法能有效劈分字符串.
注意其和String.split()使用上的不同.
实例九:
String str="10元 1000人民币 10000元 100000RMB"; str=str.replaceAll("(\d+)(元|人民币|RMB)", "¥"); System.out.println(str);
上例中,模式“(\d+)(元|人民币|RMB)”按括号分成了两组,第一组\d+匹配单个或多个数字,第二组匹配元,人民币,RMB中的任意一个,替换部分表示第一个组匹配的部分不变,其余组替换成¥.
替换后的str为¥10 ¥1000 ¥10000 ¥100000
实例十:
Pattern p = Pattern.compile("m(o+)n",Pattern.CASE_INSENSITIVE); // 用Pattern类的matcher()方法生成一个Matcher对象 Matcher m = p.matcher("moon mooon Mon mooooon Mooon"); StringBuffer sb = new StringBuffer(); // 使用find()方法查找第一个匹配的对象 boolean result = m.find(); // 使用循环找出模式匹配的内容替换之,再将内容加到sb里 while (result) { m.appendReplacement(sb, "moon"); result = m.find(); } // 最后调用appendTail()方法将最后一次匹配后的剩余字符串加到sb里; m.appendTail(sb); System.out.println("替换后内容是" + sb.toString());
实例十一:
除了用+表示一次或多次,*表示0次或多次,?表示0次或一次外,还可以用{}来指定精确指定出现的次数,X{2,5}表示X最少出现2次,最多出现5次;X{2,}表示X最少出现2次,多则不限;X{5}表示X只精确的出现5次.
例程: