正则表达式的使用详解
1.匹配
match(String regex) ;
1 String tel="18600000111"; 2 String reg="1[3578]\\d{9}"; //首字母1,第二字母3,5,7,8,后面都是数字共有9位 3 boolean b1 =tel.matches(reg); 4 System.out.println(b1);//输出结果true
2.切割
(1)切割一个或多个空格
1 String str ="aaa bbb ccc ddd eee"; 2 String [] arr =str.split(" +");//“ +”表示至少有一个空格 3 for(String s:arr){ 4 System.out.print(s); //输出aaabbbcccdddeee 5 }
(2)通过.来切割字符串
1 String str2="zhangsan.lisi.wangwu"; 2 /* \\是代表转义字符,如果你直接放split("."),是无法切割的,因为.在正则表达式中.有它特有的含义 3 当你用转义之后\\.那么它就只代表一个点,而不具有特殊意义*/ 4 String [] arr2 =str2.split("\\."); 5 for(String s:arr2){ 6 System.out.println(s); 7 } 8 9 /* 补充:在java中需要转义的除了.外,还有需要先转义不能直接切割的: 10 * $ ( ) * + [ ] ? \ ^ { } | 11 * 这么几个大家用它来切割的时候,转义后就可以了 12 */
(3)用重复项来切割
1 String str3 ="wer#######tayuio****asdfg"; 2 String reg ="(..)"; //(.)代表第一个任意字符 \\1代表回去第一组数据 +代表1个或者多个 3 String [] arr3=str3.split(reg); 4 for(String s:arr3){ 5 System.out.println(s); 6 } 7 8 /*:(.)的字符视为一个整体。 \\1代表回去第一组数据 9 14 * 那它其实在这里也就代表(.),所以就相当于(.)(.)+,这里仅仅是相当于,也是为了好理解,其实他们还是有本质区别的 10 15 * 因为(.)==\\1,就是说如果.代表a,那么\\1也就代表a,而(.)≠(.),前面代表a后面可以代表b,因为前后两个点不是同一个点 11 */
3.替换
(1)把重复的数据 替换为#
1 String str="wer#####yw****fghj"; 2 //把重复的数据 替换为# 3 str=str.replaceAll("(.)\\1+", "#");//(.) 第一个任意字符 \\1 取第一组数据 + 1个或者多个 4 System.out.println(str) ; //输出wer#yw#fghj
(2)把重复项都变成单个
1 String str="wer#####yw****fg???hj"; 2 //后一个参数的含义 可以通过$ 数字引用第一个参数中的组,这个美元符号代表就是前面小括号里的内容 3 str=str.replaceAll("(.)\\1+", "$1"); 4 System.out.println(str); //输出wer#yw*fg?hj
(3)电话号码中间几位用*表示
1 String str2="15889895644";//158****5644 2 str2=str2.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); 3 System.out.println(str2);// $1表示符号前面第一个小括号,$2代表第二个,如果有第三个小括号,那也可以$3; //输出158****5644
4.获取
(1)获取正则表达式所匹配的字符串
1 String str="da jio zhu yi laa, ming tian fang jia laa"; 2 //1.定义规则 3 String reg="\\b[a-z]{3}\\b";//任意三个字符 \\b 是单词的边界(不明白为什么加这个) 4 Pattern p =Pattern.compile(reg); 5 //3.通过正则表达对象 获取匹配器对象 并把操作的字符串关联 6 Matcher m =p.matcher(str); 7 while(m.find()){ //find()用来搜索与正则表达式相匹配的任何目标字符串 8 System.out.println(m.start()+"....."+m.group()+"..."+m.end()); 9 } //start()开始位置 group()用来返回包含了所匹配文本的字符串 end()结束位置 10 } 11 } 12 /* 有关: 在regex(正则表达式)包中,包括了两个类,Pattern(模式类)和Matcher(匹配器类)。 13 //输出3.....jio...6 14 7.....zhu...10 15 14.....laa...17 16 35.....jia...38 17 39.....laa...42
5、对于数字+汉字的组合,获取数字开头的部分: /^[0-9]*/ ; 获取汉字结尾的部分 : /[\u4E00-\u9FA5]*$/
6、用正则表达式来做数据校验
/** * 判定邮箱格式 * * @param strEmail * @return */ public static boolean isEmail(String strEmail) { String strPattern = "^[a-zA-Z][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$"; Pattern p = Pattern.compile(strPattern); Matcher m = p.matcher(strEmail); return m.matches(); } /** * 判断是否是手机号 * * @param mobile * @return */ public static boolean isMobile(String mobile) { String regex = "^((13[0-9])|(15[0-9])|(18[0-9]))\\d{8}$"; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(mobile); return m.matches(); } /** * 判断是否是身份证号码 * * @param strEmail * @return */ public static boolean isIdentify(String strEmail) { String strPattern = "(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])"; Pattern p = Pattern.compile(strPattern); Matcher m = p.matcher(strEmail); return m.matches(); } /** * 判断是否为网络链接 * * @param url * @return */ public static boolean isWebLink(String url) { Pattern pattern = Pattern .compile("http://(([a-zA-z0-9]|-){1,}\\.){1,}[a-zA-z0-9]{1,}-*"); Matcher matcher = pattern.matcher(url); if (!matcher.find()) { return false; } else { return true; } }
补充:
正则表达式--验证手机号码:13[0-9]{9}
实现手机号前带86或是+86的情况:^((\+86)|(86))?(13)\d{9}$
电话号码与手机号码同时验证:(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9})
提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
提取信息中的中国手机号码:(86)*0*13\d{9}
提取信息中的中国固定电话号码:(\d3,4|\d{3,4}-|\s)?\d{8}
提取信息中的中国电话号码(包括移动和固定电话):(\d3,4|\d{3,4}-|\s)?\d{7,14}
提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
提取信息中的中国身份证号码:\d{18}|\d{15}
提取信息中的整数:\d+
提取信息中的浮点数(即小数):(-?\d*)\.?\d+
提取信息中的任何数字 :(-?\d*)(\.\d+)?
提取信息中的中文字符串:[\u4e00-\u9fa5]*
提取信息中的双字节字符串 (汉字):[^\x00-\xff]*