(疯狂java讲义)– 摘要 正则表达式是一个强大的字符串处理工具,可以对字符串进行 查找 提取 、分割、替换等操作。String类中也提供了诸如matches()、replaceAll()、replaceFirst()、split()等 Java还提供了Pattern和Matcher两个类来专门用于提供正则表达式支持。
正则表达式所支持的合法字符:
x (可表示任何合法字符)/0mnn(8进制数0mnn所表示的字符)/xhh(16进制0xhh所表示的字符)/uhhhh(16进制值所表示的Unicode字符)/t(制表符)/n(换行符)/r(回车符)/f(换页符)/a(报警)/e(Escape符)正则表达式的特殊字符: 注:要匹配如下的字符可加“/”
$ 匹配一行的结尾^ 匹配一行的开头() 标记字表达式的开头和结尾[] 确定中括号的开头和结尾位置{} 标记前面字表达式的出现频度 eg:“/w{3}”*字表达式出现0~+∞次?字表达是出现0~1次+字表达是出现1~+∞次.匹配除 /n 外单字符/ 转义下一个字符通常在一个正则表达式中多次出现| 两项之间任选一项=>or预定义字符:
/d 匹配0~9之间的数字/D 匹配非数字/s 匹配所有空白字符 eg:/t /n /f /r/S 匹配所有非空白字符/w 匹配所有单词字符/W 匹配所有非单词字符Pattern Matcher类
Pattern是不可变类可供多个并发线程安全使用 Matcher类提供的常用方法如下:
find() 返回目标字符串中是否包含与Pattern(模板)匹配的子串group() 返回上一次与Pattern匹配的子串start() 返回上一次与Pattern匹配的子串在目标字符串中的开始位置end() 返回上一次与Pattern匹配的子串在目标字符串中的结束位置+1lookingAt() 返回目标字符串前面部分与Pattern是否匹配matches() 返回整个目标字符串与Pattern是否匹配reset() 将现有的matcher对象应用于一个新的字符串序列public class JavaTest { public static void main(String[] args) { String str = "我想购买一本《疯狂JAVA讲义》,尽快联系我13500006666," + "范德萨发集合地少废话代课老师13611125565" + "范德萨发大水发的撒范德萨范德萨15899903312"; Matcher m = java.util.regex.Pattern.compile("((13//d)|(15//d))//d{8}").matcher(str); while (m.find()){ System.out.PRintln(m.group()); } }}*运行结果为: 13500006666 13611125565 15899903312*
public class StartEnd { public static void main(String[] args) { String regStr = "Java Is My Love"; Matcher matcher = Pattern.compile("//w+").matcher(regStr); while (matcher.find()) { System.out.println(matcher.group() + "子串起始位置" + matcher.start() + "子串结束位置" + matcher.end()); } }}*运行结果: Java子串起始位置0子串结束位置4 Is子串起始位置5子串结束位置7 My子串起始位置8子串结束位置10 Love子串起始位置11子串结束位置15*
*注:上段代码是对单词进行分割
public class StringReg { public static void main(String[] args) { String[] msgs = { "Java has regular expressions in 1.4", "regular expressions now expressing in java", "java represses oracular expressions" }; for (String msg : msgs) { System.out.println(msg.replaceFirst("re//w*", "哈哈:)")); System.out.println(Arrays.toString(msg.split(" ")) + "/n"); } }}*运行结果: [Java, has, regular, expressions, in, 1.4]
哈哈:) expressions now expressing in java [regular, expressions, now, expressing, in, java]
java 哈哈:) oracular expressions [java, represses, oracular, expressions]*
*注:Arrays 类中的静态方法 Arrays.toString()
public class ReplaceTest { public static void main(String[] args) { String[] msgs = { "Java has regular expressions in 1.4", "regular expressions now expressing in java", "java represses oracular expressions" }; Pattern p = Pattern.compile("re//w*"); Matcher matcher = null; for (String msg : msgs) { if (matcher == null){ matcher = p.matcher(msg); }else{ matcher.reset(msg); } System.out.println(matcher.replaceAll("哈哈:)")); } }}*运行结果: Java has 哈哈:) exp哈哈:) in 1.4 哈哈:) exp哈哈:) now exp哈哈:) in java java 哈哈:) oracular exp哈哈:)*
*注:此段代码是用来替换符合re开头的单词为–>[ 哈哈:) ]
public static void main(String[] args) { String[] mails = { "kongyeeku@q63.com", "kongyeeku@gmile.com", "liguang@crazyit.org", "wawa@abc.com" }; String mailRegEx = "//w{3,20}@//w+//.(com|org|cn|net|gov)"; Pattern mailPattern = Pattern.compile(mailRegEx); Matcher matcher = null; for (String mail : mails) { if (matcher == null) { matcher = mailPattern.matcher(mail); } else { matcher.reset(mail); } String result = mail + "/t" + (matcher.matches() ? "yes" : "no") + "/n一个有效的邮箱地址"; System.out.println(matcher + "/t" + result); } }}*运行结果为: java.util.regex.Matcher[pattern=/w{3,20}@/w+.(com|org|cn|net|gov) region=0,17 lastmatch=kongyeeku@q63.com] kongyeeku@q63.com yes 一个有效的邮箱地址 java.util.regex.Matcher[pattern=/w{3,20}@/w+.(com|org|cn|net|gov) region=0,19 lastmatch=kongyeeku@gmile.com] kongyeeku@gmile.com yes 一个有效的邮箱地址 java.util.regex.Matcher[pattern=/w{3,20}@/w+.(com|org|cn|net|gov) region=0,19 lastmatch=liguang@crazyit.org] liguang@crazyit.org yes 一个有效的邮箱地址 java.util.regex.Matcher[pattern=/w{3,20}@/w+.(com|org|cn|net|gov) region=0,12 lastmatch=wawa@abc.com] wawa@abc.com yes 一个有效的邮箱地址*
*注:Matcher的结果在控制台输出的是类似于 java.util.regex.Matcher[pattern=/w{3,20}@/w+.(com|org|cn|net|gov) region=0,17 lastmatch=kongyeeku@q63.com]这样的字符串
新闻热点
疑难解答