初识正则表达式

一套规则 - 匹配字符串:所有的规则中的字符可以刚好匹配到字符串中的内容

主要作用:

  1.能检测一个输入的字符串是否合法  -- web开发项目--表单验证

    用户输入一个内容的时候,我们要提前做检测

    能够提高程序的效率并减轻服务器的压力

  2.从一个大文件中找到所有符合规则的内容  --日志分析/爬虫

    能够高效地从一大段文字中快速找到符合规则的内容

一、元字符

# 字符组  --> []
# [^] --> 匹配非字符组中字符的所有字符
    # [abc]  一个中括号只表示一个字符位置:表示匹配a或b或c
    # [0-9] 表示匹配 0 到 9 之间的一个数字(根据ascill码范围)
    # [a-z] 表示 a 到 z 之间的一个字母
    # [A-Z]
    # [a-zA-Z] 匹配范围内的一个大小写字母
    # [0-9a-z] 数字和小写字母
    # [0-9a-zA-Z] 数字和大小写字母


# 在正则表达式中能够帮助我们表示匹配内容的符号:元字符
# [0-9] --> \d  表示匹配任意一位数字   digit

# \w --> 表示匹配任意一位 数字、字母、下划线

# \s --> 匹配空白符  制表符、回车、空格

# \b ---> 边界,即以什么开头(\b.)或以什么结尾(.\b)  ---不常用

二、元字符

# 元字符:匹配内容的规则
# [] \d \w \s \t \n  \W \D \S

# \W --> 取反,匹配非数字、字母、下划线

# \S --> 取反,匹配非空白符

# \D --> 取反,匹配非数字

# [\d] == \d

# [\d\D] [\w\W] [\s\S] --> 匹配任意一个字符
# . --> 匹配除了换行符之外的任意一个字符


# [^\d] --> 匹配所有的非数字

# ^ --> 从头开始匹配(正则表达式开头)

# $ --> 匹配结尾前的相应字符(正则表达式结尾)


# 或:
# ad|bc --> 匹配 ad 或 bc ,如果左边匹配成功了,则不会再匹配右边
# abc|ab --> 当两边有重复的部分时,应把长的字符串放在左边



# 分组:约束 | 描述的内容的范围问题
# www\.oldboy\.com|www\.taobao\.com|www\.baidu\.com
# 分组后:www\.(oldboy|taobao|baidu)\.com



# 记忆元字符:都是表示能匹配哪些内容,一个元字符总是表示一个字符的位置
# \d \w \s \t \n \D \W \S
# [] [^] .
# ^ $
# | ()

三、量词

# 匹配两位整数:--> [1-9]\d


# 量词:
# 紧接某个元字符,即同一个元字符要匹配多少次

# {n} --> 表示匹配n次

# {n, } -->匹配n次及n次以上

# {n, m} --> 匹配 n 到 m 次

# ? --> 匹配0次或1次  == {0,1}

# + --> 匹配1次或多次 == {1,}

# * --> 匹配0次或多次 == {0,}


# 匹配0次:
        # 整数 \d+
        # 小数 \d+\.\d+
        # 整数或小数  \d+\.?\d* 这个表达式有漏洞

        # 分组的作用:\d+(\.\d+)?  --> 表示整数或小数

# 手机号码
        # 1 3-9 11位:^1[3-9]\d{9}$

# 判断用户输入的内容是否合法,如果输入对就能查到结果
# 约束:^1[3-9]\d{9}$

# 从一个大文件中找到所有符合规则的内容
# 约束:1[3-9]\d{9}

四、贪婪匹配与惰性匹配

# 贪婪匹配:
        # 在量词给定范围{n,m} 下,尽量多的匹配内容

# 惰性匹配:即非贪婪匹配
        # 元字符 量词 ?
        # .*?x  表示匹配任意字符,任意次数,但一旦遇到x就停下来


# 转义符:
    # 原本有特殊意义的字符,到了表达它本身的意义的时候,需要转义

    # 有一些有特殊意义的字符,放到字符组中会取消它的特殊意义
        # [.]
        # [() . * + ?]
        # [a\-c] 在字符组中,如果不希望 - 表示范围,需要转义或者放在字符的最前面或最后面

五、转义字符

# 转义字符
    # .有特殊的意义,取消特殊的意义 \.
    # 取消一个元字符的特殊意义有两种方法:
        # 1. 在这个元字符前加 \

        # 2. 对一部分字符生效,把这些元字符放在字符组里
            # [. ? + * ()]

六、小习题

# 15/18的位身份证号
    # 15位:第一位为1-9
        # ^[1-9]\d{14}$


    # 18位:第一位1-9 最后一位0-9或x
        # ^[1-9]\d{16}[0-9x]$

    # 18/15位:^([1-9]\d{16}[0-9x]|[1-9]\d{14})$

    # 写法2:^[1-9]\d{14}(\d{2}[0-9x])?$

 

posted @ 2020-08-19 13:43  LGQ天  阅读(106)  评论(0)    收藏  举报