------- android培训、java培训、期待与您交流! ----------
- 为什么?:为什么要有正则表达式。
我们先看看一个练习:
对QQ号进行校验:
要求:5~15位, 0不能开头,只能是数字
代码如下
static boolean getRightQQ(String QQ) { // 1.先判断是否是5到15位数值 // boolean yes = true; int len = QQ.length(); if (5 <= len && len <= 15) { // 判断开始字符 if (QQ.startsWith("0")) { System.out.println(QQ + "号码以0开头"); yes = false; } else { // 判断是否是数字 char[] qq = QQ.toCharArray(); for (int i = 0; i < qq.length; i++) { if (qq[i] >= '0' && qq[i] <= '9') { // 那么就是不含有字符的。 return yes; } else { // 含有字符的。 System.out.println("输入的QQ号码含有字符"); yes = false; } } } } else { System.out.println(QQ + "长度错误"); yes = false; } return yes; }
总觉得那样校验很麻烦,写了一大堆的代码:我们在来看看正则表达式的效果
代码如下
static void getRegex() { //如果我们用的是正则表达式的话: String zhu = "846650266"; //匹配手机号 String regex1 = ""; String regex = "[1-9]\d{4,14}"; boolean flag = zhu.matches(regex); if (flag) { System.out.println(zhu+"合法>>>>>>>"+flag); } else { System.out.println(zhu+"不合法>>>>>>>"+flag); } }
java.util.regex 包:
经过上面的练习我们可以看出正则表达式是代码简单了许多。不是那么的沉重。
什么是正则表达式呢?
正则表达式定义了字符串的模式。
正则表达式可以用来搜索、编辑或处理文本。
正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
Java正则表达式和Perl的是最为相似的。
作用:用来传门操作字符串
特点:用一些特点的符号来表示一些代码操作
所以我们在学习正则表达式,就是学习一些特殊的符号
好处:就是可以简化我们的操作。
缺点:符号定义越多,正则表达式就会越长,阅读就会越难操作
具体操作
- Matcher类:
Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。类的实例用于此目的则不安全。
- Pattern类:
pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。
- PatternSyntaxException:
PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
练习和模拟:
- 匹配 matches()
static boolean getRightQQ(String QQ) { // 1.先判断是否是5到15位数值 // boolean yes = true; int len = QQ.length(); if (5 <= len && len <= 15) { // 判断开始字符 if (QQ.startsWith("0")) { System.out.println(QQ + "号码以0开头"); yes = false; } else { // 判断是否是数字 char[] qq = QQ.toCharArray(); for (int i = 0; i < qq.length; i++) { if (qq[i] >= '0' && qq[i] <= '9') { // 那么就是不含有字符的。 return yes; } else { // 含有字符的。 System.out.println("输入的QQ号码含有字符"); yes = false; } } } } else { System.out.println(QQ + "长度错误"); yes = false; } return yes; }
- 切割 split()
static void splitDemo() { String kk = "abcdeefghhijklmnopqrsttuvwwxyz"; //把上面的的字串重复的进行切割 String regex = "(.)\1+"; String[] strarry= kk.split(regex); for (String string : strarry) { System.out.println(string); } }
- 替换 replace()
static void replaceDemo() { //字符串的替换的操作 //替换 叠词 String str ="abcdeefghhijklmnopqrsttuvwwxyz"; //将所有的重复的词都替换成为 # String regex = "(.)\1+"; //这里用到了组的操作 str=str.replaceAll(regex, "#"); System.out.println(str); }
- 获取
1.将正则表达式封装成为对象
2.让正则对象和要操作的字符串相关联
3.关联后,获取正则匹配引擎
3.通过引擎对符合匹配的子串进行操作。
结语:正则表的式应用还有许多,比如网络爬虫的写法。但是在我学习的过程当中。一直没有办法深入的学习下去。
不知道为何就是觉得有些难,非常拗口,但是我并不怕,只是觉得目前很少用到,花大量的时间去记住那些匹配规则
我就会很容易忘记, 记住了一些方法,和API当中的规则。在进入黑马以后我会陆续补上的。