No.25正则表达式

No.25

今日概要

  • 正则表达式

内容详细

正则表达式

  1. 为什么要有正则表达式?
    • 一个人的电话号码
    • 一个人的身份找号
    • 一台机器IP地址
  2. 表单验证
    • 验证用户输入信息是否准确
    • 银行卡号
  3. 爬虫
    • 从网页源码中获取链接或重要数据

1规则

  • 规则一:本身是哪一个字符,就匹配字符串中的哪一个字符。
  • 规则二:字符组 [字符1,字符2],一个字符组就代表匹配一个字符,只要这个字符出现在字符组里,那么就说明这个字符能匹配上。
    • 字符组中还可以使用范围 [A - Z] \ [0 - 9]
    • 所有的范围都必须遵循ascii码从小到大来指定

2元字符

  • [0 - 9] → \d
    • \ 是转义符,转义符转义了d,让d能匹配所有0-9之间的数字。
    • [\d] [0-9] \d 三者没有区别都是匹配一位数字。
  • \w
    • 匹配所有数字、字母、下划线
  • \s
    • 匹配空白(空格、换行符、制表符)
    • [\d\D] [\w\W] [\s\S] 匹配所有一切字符,没有多大意义。
  • \t
    • 匹配制表符
  • \n
    • 匹配换行符
  • \D
    • 匹配所有非数字
  • \W
    • 匹配除数字、字母、下划线之外的所有字符
  • \S
    • 匹配除空白之外的所有字符
  • .
    • 匹配除了换行符之外的所有字符
  • [ ]
    • 字符组:只要在中括号内的所有字符都是符合规则的字符。
  • [^]
    • 非字符组:只要在中括号内的所有字符都是不符合规则的字符。
  • ^
    • 表示一个字符的开始
  • $
    • 表示一个字符的结束
  • |
    • 表示或,如果两个规则有重叠部分,总是长的在前面短的在后面。
  • ()
    • 表示分组,给一部分正则规定为一组,
    • ( | ) 分组配合或使用,或的作用域就可以缩小了。
  • 记忆顺序
    • \d (digit) \w (word) \s(space) \t (table) \n (next)
    • \D \W \S
    • .
    • [ ] [ ^ ]
    • ^ $
    • | ( )

3量词

  • {n} 表示只能出现n次

  • {n,} 表示至少出现n次

  • {n,m} 表示至少出现n次,至多出现m次

  • ? 表示匹配0次或1次

    • 可有可无,但是有只能有1个,比如小数点。
  • + 表示匹配1次或多次

  • * 表示匹配0次或多次

    • 可有可无,但是有可以有多个,比如小数点后n位
    #习题
    '1.匹配任意的两位整数'
    \d{2}
    
    '2.匹配保留两位小数的任意数字'
    \d+\.\d{2}
    
    '3.匹配一个整数或者小数'
    \d+\.\d+|\d+
    \d+(\.\d+)?
    
  • 注意

    • 贪婪匹配:总是在符合量词条件的范围内尽量多匹配。

      # 默认贪婪匹配(回溯算发实现)
      \d{6,12}
      12345678 # 量词范围条件内尽量取多的次数匹配
      结果:全部匹配
      
      <.+>
      <html>abcdefghijk</htlm> # 只会匹配到一个结果
      结果:全部匹配
      
    • 惰性匹配:总是匹配符合条件范围内尽量小的字符串。

      # 非贪婪匹配
      \d{6,12}?
      12345678
      结果:123456 # 只匹配条件类最小的次数。
      
      \d+?3       
      12345678  
      结果:123
      
    • 元字符+量词+?:表示按照元字符规则在量词范围内匹配,一旦遇到x就停止。

      \d+?3       
      12345678  
      结果:123
      
    • .*?x:表示匹配任意的内容任意多次遇到x就停止。

常用写法:

  • 元字符或普通字符
  • 元字符量词
  • 元字符量词?
    • \d?:如果?直接出现在元字符后,就只表示量词不表示非贪婪符。
    • ?要表示非贪婪符一般是跟在量词后面。
    • d+?x / .*?x
      • 一般情况下+?x / *?x 前面放正则表达式来进行匹配

4实例

# 身份证号正则表达式
'''
15位:全数字,首位不为0。
18位:全数字,首位不位0,最后一个可能是x和数字。
'''
[1-9](\d{16}[\dx]|\d{14})
[1-9]\d{14}(\d{2}[\dx])?

作业

  • 元字符
  • 量词
  • 贪婪匹配和非贪婪匹配

猜你喜欢

转载自www.cnblogs.com/elliottwave/p/12549638.html