14.正则表达式

正则表达式

1.介绍正则表达式及其作用

  1. 简单介绍
    • 正则表达式就是描述字符串排列模式的一种自定义语法规则
    • 如果可以使用字符串函数完成的任务则就不要用正则表达式了
    • 有一些复杂的操作,只能用正则表达式来完成
    • 正则表达式也称为一种模式表达式
    • 正则表达式就是通过构造具有特定规则得模式,在于输入的字符串信息进行比较,分割,匹配,查找,代替等功能
  2. 什么是正则表达式
    • 如```/<img\s+src=".*?"/>/` ``, 这就是正则表达式
    • 乱七八糟的一堆字符堆砌在一起,神秘的符号,有奇特的意义
  3. 正则表达式可以做什么
    • 验证用户名长度
    • 验证邮箱的格式
    • 验证URL
    • BBS编辑器
    • QQ聊天表情
    • 新闻采集器(小偷程序)
  4. 正则表达式的特点
    1. 正则表达式是一个字符串
    2. 由具有特殊意义的字符组成的字符串
    3. 具有一定的编写规则,也是一种模式
    4. 可以看看做一种编程语言,因为使用一些特殊的字符,按照规则编写出一个字符串,形成一种模式--正则表达式
    5. 如果正则表达式不和函数一起使用,则它就是一个普通的字符串,如果将正则表达式放在某个函数中使用,才能发挥正则表达式的作用
  5. PHP中提供了两套正则表达式的函数库
    • posix 扩展正则表达 ereg
    • perl 兼容正则表达(推荐) preg
  6. 正则表达式学习两点
    • 正则表达式的模式的编写
    • 正则表达式强大处理函数
  7. 正则表达式的语法
    1. 正则定界符
    2. 正则表达式中的原子(组成正则表达式的最小字符)
    3. 正则表达式的元字符(原子修饰符)
    4. 正则表达式的模式修正符

2. 正则表达式的组成(语法)

  1. 正则表达式的定界符

    • 正则定界符就是用来声明正则表达式边界的符号,正则表达式是字符串类型.所以在定义正则表达式时要先定义字符串类型
    • 正则表达式最常用的定界符是 /,实际除字母,数字以及\之外的字符都可以做正则表达式的边界符使用
    • 注意:一个完整的正则表达式准确的说有两个边界符
      • 第一个是字符串类型的引号边界符
      • 第二个是正则表达式的边界符
  2. 正则表达式中的原子

    1. 什么是原子:组成正则表达式的最小单位
    2. 原子的组成内容
      • 正常大小写字母,所有可见的字符就是原子
      • 大部分不可见的字符也是原子,如空格, \n, \r, \t
      • \d 表示匹配0-9之间的任意一字符
      • \D 表示匹配除0-9外的任意一字符
      • \s 表示匹配空白字符,包括空格, \n, \r, \t
      • \S 表示匹配除空表字符外的任意一字符
      • \w 表示匹配数字大小写字母以及下划线中的任意一字符
      • \W 表示匹配除大小写字母,数字以及下划线之外的任意一字符
      • [ ]原子列表
        • 表示在指定字符中选取一个字符
        • [5-9]表示5,6,7,8,9连续字符,允许缩写为开始字符-结束字符
        • 也可以[0-9a-zA-Z]
      • [^]排除类表(^[]里边)
        • [^abc] 表示除了a,b,c外所有字符都可使用
      • . 匹配一个字节(匹配的一个字节)的字母(或其他什么)
      • .+ 表示匹配匹配的所有内容
  3. 元字符(原子修饰符)

    1. 原子数量修饰符
      • + 表示前边的原子出现一次或多次
      • ? 表示前边的原子出现0次或1次
      • * 表示前边的原子出现0次1次或多次
      • {m,n} 表示前边的原子最少出现m次最多出现n次
      • {m} 表示前边的原子出现指定m次
      • {m,} 表示前边的原子最少出现m次及其以上
    2. 词边界修饰符
      • 什么是词边界
        • 可以分割一个单词的字符都是词边界,包括空格,标签符号,特殊字符,字符串的开始与结束,每一行的结束部分
        • 不可当词边界符的部分就是字母和数字
      • \b 表示 词边界
      • \B 表示非词边界
    3. 字符串边界修饰符(也就是开始与结束)
      • ^ 表示以指定的字符开头的内容
      • $ 表示以指定字符结尾的内容
      • ^字符串$ 表示精准匹配某个字符 多一个少一个都是错误
    4. 选择修饰符 |
    5. 模式选择单元 ()
      1. 改变优先级
      2. 将多个原子视为一个原子,目的是为了使用原子数量修饰符
      3. 将匹配的内容暂时存在内存中
      4. 如果使用()仅仅是为了模拟一个原子使用原子数量修饰符,那么可以在括号内的开始出处使用?:来解除存于内存的作用,提高效率 (?:)
      5. 可以将括号的内容在函数的辅助下进行反向引用操作
  4. 模式修正符

    1. i 忽视(不区分)大小写
    2. x 忽略正则中的空白
    3. s 使得.可以匹配到\n
    4. m 视为多行处理,可以在^$下匹配到\n
    5. S 加速匹配
    6. U 改变贪婪模式
      • 贪婪模式: 匹配最远的结束后为止,默认打开使用
      • .*? : 非贪婪模式(这时在加上U就是贪婪了)

3. 正则表达式的函数

  1. preg_grep()返回与模式匹配的数组单元(一维数组)
    • image-20220531174414161
    • parameter1: 正则表达式,模式
    • parameter2:要匹配的数组
    • parameter3(可选): 默认0 取 1 则为取反
    • 返回值: 返回与模式匹配的数组单元(下标与原1数组对应的不会重新排列)(返回与原数组一模一样的匹配的数组(包括下标))
  2. preg_match 进行一次正则匹配 适合查询有没有
    • image-20220531212843887
    • parameter1:正则表达式
    • parameter2:要匹配的数组
    • parameter3(可选);返回结果到数组里
    • 返回值;没匹配到-- 0, 匹配到-- 1
  3. preg_match_all 进行正则匹配
    • 获取全部的匹配内容到数组
    • 适合查询有多少
  4. preg_split 用正则进行分割字符串 (能用字符串函数的就用字符串函数)
    • parameter1: 正则表达式
    • parameter2: 要处理的字符串
    • 返回值: 分割后的数组
  5. preg_replace 执行一个正则表达式的搜索与替换
    • parameter1: 正则表达式(也可以是正则数组['//','//','//'] or array('//','//','//'))
    • parameter2: 替换的新内容(数组或字符串)
    • parameter3: 要替换的字符串或数组
    • 返回值: 新的数组
posted @   VarFa  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示