1.什么是正则表达式?
Regex代表Regular Express。正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
2.正则表达式用来做什么?
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
3.正则表达式基本语法
字符 x 字符 x。举例:'a'表示字符a \ 反斜线字符。 新行(换行)符 ('u000A') 回车符 ('u000D') 字符类 [abc] a、b 或 c(简单类) [^abc] 任何字符,除了 a、b 或 c(否定) [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) [0-9] 0到9的字符都包括 预定义字符类 . 任何字符。我的就是.字符本身,怎么表示呢? . d 数字:[0-9] D 非数字:[^d]/[^0-9] w 单词字符:[a-zA-Z_0-9] W 非字符[^w] 边界匹配器 ^ 行的开头 $ 行的结尾 单词边界, 就是不是单词字符的地方。 Greedy 数量词 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m 次 运算符 XY X后跟 Y X|Y X 或 Y (X) X,作为捕获组
4.正则表达式匹配,切割,替换,获取
package cn.itcast.regex.demo; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexDemo { public static void main(String[] args) { /* * 1.匹配 * * 2.切割 * * 3.替换 * * 4.获取 */ functionDemo_1(); functionDemo_2(); functionDemo_3(); functionDemo_4(); } // 1匹配 public static void functionDemo_1() { String tel = "15800001111"; String regex = "1[358]\d{9}"; boolean b = tel.matches(regex); System.out.println(tel + ":" + b); } // 2切割 public static void functionDemo_2() { String str = "zhangsanttttttttxiaoqiangmmmmmmmmmzhaoliu"; String[] names = str.split("(.)\1+");// str.split("\."); for (String name : names) { System.out.println(name); } } // 3替换 public static void functionDemo_3() { String str = "zhangsanttttttttxiaoqiangmmmmmmmmmzhaoliu"; str = str.replaceAll("(.)\1+", "$1"); System.out.println(str); String tel = "15800001111"; tel = tel.replaceAll("(\d{3})\d{4}(\d{4})", "$1****$2"); System.out.println(tel); } // 4获取 public static void functionDemo_4() { String str = "da jia hao,ming tian bu fang jia!"; String regex = "\b[a-z]{3}\b"; // 1.将正则表达式封装成对象 Pattern p = Pattern.compile(regex); // 2.通过正则对象获取匹配器对象 Matcher m = p.matcher(str); while (m.find()) { System.out.println(m.group()); } } }
正则表达式的三个实例:
package cn.itcast.regex.test; import java.util.Iterator; import java.util.TreeSet; public class RegexTest { /* * 1.治疗口吃:我我...我我...我我我要...要要要要....要要要..学学学学学学。。。学学学编编.....................编程程. * 2.对ip地址排序. * 3.对邮件地址校验. */ public static void main(String[] args) { test_3(); } public static void test_1() { String str = "我我...我我...我我我要...要要要要....要要要" + "..学学学学学学...学学学编编.....................编程程"; // 去掉. str = str.replaceAll("\.", ""); System.out.println(str); // 去掉叠词 str = str.replaceAll("(.)\1+", "$1"); System.out.println(str); } /* * 192.168.10.34 127.0.0.1 105.70.11.55 */ public static void test_2() { String ip_str = "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55"; ip_str = ip_str.replaceAll("(\d+)", "00$1"); System.out.println(ip_str); ip_str = ip_str.replaceAll("0*(\d{3})", "$1"); System.out.println(ip_str); String[] ips = ip_str.split(" +"); TreeSet<String> ts = new TreeSet<String>(); for (String ip : ips) { ts.add(ip); } for (String ip : ts) { System.out.println(ip.replaceAll("0*(\d+)", "$1")); } } // 对邮件地址校验 public static void test_3() { String mail = "abc1@sina.com"; String regex = "[a-zA-Z\d_]+@[a-zA-Z\d_]+(\.[a-zA-Z]{2,3})"; boolean b = mail.matches(regex); System.out.println(mail+":"+b); } }