第十六次总结 正则表达式

  1. 什么是正则表达式?
  2. 正则表达式的字符?
  3. 预定义的字符?
  4. 字符的数量词? 
  5. 懒惰性数量词和贪婪性数量词?
  6. Java中的正则表达式的对象表示形式
  7. 断言
  8. 验证一个手机号码是不是合法的?

     验证中国的座机号码是不是合法的?

区号-电话号
0731-88888888
0730-7777777
010-11111111

  


1.什么是正则表达式?

1.正则表达式就是一个字符串
是一个用来对字符串进行处理的一个特殊的字符串
可以简化字符串的处理

匹配 equals matches
截取 substring
替换 replace
切割 split

2.正则表达式的组成

a.字符 必须
b.数量 可选
c.分组 可选

3.边界匹配符
^ 行的开头
$ 行的结尾
\b 单词边界

 

4.修饰符
i 忽略大小写
g 全局匹配
m 多行匹配


2.正则表达式的字符?

任何一个字符都可以是正则表达式的字符
[abc] 表示一个字符,a或者b或者c
(b|d|rt) 表示一组字符 b或者的或者rt
[a-z] 表示任意一个小写字母
[A-Z] 表示任意一个大写字母
[0-9] 表示任意一个数字
[1-5] 表示1~5这5个数字中的某一个
[a-zA-Z0-9] 表示所有的字母和数字中的某一个
[a-m&&[h-z]] 等价于[h-m]
[^bcd] 除开abcd以外的所有字符中的一个
[ae-z]
[a-zA-Z_0-9] 所有的单词字符


3.预定义的字符?

. 一个任意字符
\d 数字,等价于[0-9]
\D 非数字等价于[^0-9]
\w 所有的单词字符,等价于[a-zA-Z_0-9]
\W 非单词字符
\s 空白字符 空格 \t \r \n
\S 非空白字符

 


4.字符的数量词?

用来表示字符要出现的次数
{5,10} 表示最少5次,最多10次
{5,} 表示最少5次,无上限
{5} 表示必须5次
? 表示0次或一次
* 表示0次或多次
+ 表示1次或多次

 

案例
x[abc]{5,10}y
x[abc]?y 可以匹配 xay xby xcy xy
x[abc]+y 不能匹配 xy
可以匹配 xabcabcy
x[abc]*y 可以匹配 xy
可以匹配 xabcabcy


5.懒惰性数量词和贪婪性数量词?

{5,10}? 5个到10个,但尽可能少
?? 0个或者1个,但尽可能少
*? 0个或者多个,但尽可能少
+? 1个或者多个,但尽可能少

{5,10}+ 5个到10个,但尽可能多
?+ 0个或者1个,但尽可能多
*+ 0个或者多个,但尽可能多
++ 1个或者多个,但尽可能多


6.Java中的正则表达式的对象表示形式

Pattern pattern = Pattern.compile("regex",flag);
Matcher matcher = pattern.matcher(str);
matcher.replaceAll()
matcher.replaceFirst()
matcher.split()
matcher.find()
matcher.group()

 


7.断言

?<=exp 以exp开头
?=exp   以exp结尾
?<!exp 不以exp开头
?!exp   不以exp结尾
推导要匹配的字符串的前面或者后面的内容

 

练习:

从网址中提取出域名
http://www.baidu.com/a/b/c.html?key=123&n=abc

 public static void main(String[] args) {

        String msg = "ftp://image.baidu.com/a/b/c.html?key=123&n=abc";

        //提取hello后面的第一个单词
        Pattern pattern = Pattern.compile("(?<=https?://\\w+\\.)\\w+\\.\\w+");

        Matcher matcher = pattern.matcher(msg);
        
        while(matcher.find()){
            String str = matcher.group();
            System.out.println(str);
        }
    }

 


8.验证一个手机号码是不是合法的?

验证中国的座机号码是不是合法的?

区号-电话号
0731-88888888
0730-7777777
010-11111111

/**
 * 正则表达式
 */
public class Demo {
    public static void main(String[] args) {
        //座机号码
        String number = "0731-11111111";
        sptel(number);
        //手机号码
        String telNunber = "17369299863";
        tel(telNunber);
    }

    /**
     * 验证中国的座机号码是不是合法的
     *
     * @param number 电话号码
     */
    public static void sptel(String number) {
        String regex = "(\\d{3,4})-\\d{7,8}";
        System.out.println(number.matches(regex));
    }

    /**
     * 验证一个手机号码是不是合法的
     *
     * @param telNunber 手机号码
     */
    public static void tel(String telNunber) {
        String regex = "1[^012]\\d{9}";
        boolean l = telNunber.matches(regex);
        System.out.println(l);
    }
}
posted @ 2020-08-10 14:22  Zc小白  阅读(158)  评论(0)    收藏  举报