PHP正则表达式

使用原则

可以使用函数处理就不要使用正则表达式, 正则表达式的效率比函数低, 主要用于处理复杂字符串

格式

/ 原子和元字符 /模式修正符

特点

正则表达式是一串字符串, 由含有特殊意义的字符组成, 可以看做一种语言, 只有在函数中使用才能发挥作用

分类

  • POSIX 扩展正则表达式函数库: PHP4 中使用, 以 ereg_ 开头
  • Perl 兼容正则表达式函数库: PHP5 中使用, 以 preg_ 开头, 推荐使用, 效率高

定界符

“/” 是开始和结束的符号, 除了字母、数字、“” 以外的任意字符都可以是定界符

原子

正则表达式可以单独使用的字符, 就是原子。原子是正则表达式最基本的单位, 正则表达式至少要含有一个原子, 分类如下:

  • 打印字符: 可以在屏幕上输出的字符串(字母、数字、特殊符号)
  • 非打印字符: 字符串中的格式控制符, 如: “\cx”(x 是控制字符)、“\f”(换页)、“\n”(换行)、“\r”(回车)、“\t”(制表符)、“\v”(垂直制表符) 等等之类的
  • 转义字符: 像 *、? 等, 正则表达式赋予了特殊含义, 如果想匹配这类字符串, 需使用转义字符转义
  • 表示范围的原子: \d(任意十进制数字)、\D(除任意十进制数外的字符)、\s(任意空白字符)、\S(任意非空白字符)、\w(任意一个字)、\W(与\w相反)
  • 自定义原子表(“[]”): 匹配 [] 中的任意一个原子, 不加 [] 是匹配全体原子;使用 - 表示范围, 如: [1-3] 表示匹配 1 或 2 或 3;使用 ^ 匹配非原子表中的原子, ^ 必须放在首位

元字符

用来修饰原子用的, 不能单独使用, 由被正则表达式赋予特殊含义的字符组成, 分类如下:

  • 原子出现次数(不设上限则使用贪婪模式): *(出现任意次)、+(至少出现一次)、?(最多出现一次)、{}(自定义原子出现次数: {5}: 出现5次;{5, }: 最少出现 5 次;{5, 10}: 最少出现 5 次, 最多出现 10 次)
  • “.”: 表示除换行符外任意字符
  • “^”: 放在表达式开头, 表示字符串必须以这个表达式开头, 相当于 “\A”
  • “$”: 放在表达式末尾, 表示字符串必须以这个表达式结尾, 相当于 “\Z”
  • “|”: 表示或, 优先级最低。如: cat|dog, 匹配的是 cat 或者 dog, 而不是 t 或 d
  • “\b”: 表示单词边界。“\bone\b” 表示单词 “one”
  • “\B”: 表示非单词边界。“\Bone\B” 匹配的是某个单词里的 “one”
  • “()”:
  • 把一小串原子当成大原子, 如: (abc)+ 表示 “abc” 至少出现一次
  • 改变优先级
  • 作为子模式使用。
  • 子模式的作用是对匹配完的结果继续匹配, 使用函数的话, 会返回一个数组, 第一个元素是符合正则表达式的结果, 后面依次是每个子模式匹配的结果, 子模式可以嵌套子模式
  • 屏蔽子模式的写法: (?: 正则表达式 )
  • 反向引用: 使用 “\1” 获取第一个子模式的匹配结果, “\1” 不是转义字符, 所以 “\1” 和 ‘\1’ 等价

模式修正符

在定界符号之外使用的特殊字符

  • i: 匹配时不区分大小写
  • m: 默认情况, 将字符串视为一行, 加 m 视为多行, ^、$ 视为多行后, 任何一行都可以以正则开始或结束
  • s: 表示将字符串视为一行, 换行符变成了一般符号, 可以被 “.” 匹配
  • x: 忽略模式中的空白
  • A: 必须以正则开头
  • Z: 必须以正则结尾
  • U: 正则默认使用贪婪模式, 第一个起始标记和最后一个结束标记匹配, 中间就算有结束标记也忽略, 例如表达式为 "<a>.*</a>", 字符串为 "<a></a></a>", 则匹配的结果是 "<a></a></a>", 而不是 "<a></a>", 使用 U 可以取消贪婪模式, 从而匹配到 "<a></a>", 而不是 "<a></a></a>"。在 .*、.+ 等符号后面加上 ? 也可以取消贪婪模式。如果同时使用 ? 和 U, 则互相抵消, 仍然使用贪婪模式

正则处理函数

  • perg_match(): 匹配字符串
  • perg_match_all(): 匹配所有字符串
  • preg_replace(): 搜索和替换
  • preg_split(): 分割字符串
  • preg_grep(): 对数组的每个元素进行匹配, 返回正确匹配的单元
  • preg_replace_callback(): 用回调函数执行搜索和替换

字符串处理函数

如果能使用字符串处理函数处理的, 就不要用正则, 因为字符串处理函数的效率比正则稍高

  • strstr(B, A): 搜索字符串 A 在字符串 B 中第一次出现的位置, 并从这个位置开始返回剩下的字符串(返回时包含字符串 A ), 区分大小写
  • stristr(): 作用和 strstr() 一样, 但是不区分大小写
  • strpos(): 返回字符串在另一个字符串中第一次出现的位置, 区分大小写
  • stripos(): 同 strpos(), 不区分大小写
  • strrpos(): 返回字符串在另一个字符串中最后一次出现的位置, 区分大小写
  • strripos(): 同 strrpos(), 不区分大小写
  • substr(): 将指定字符串从指定位置开始分割, 返回指定位置后面的文本
  • str_replace(): 替换字符串, 区分大小写
  • str_ireplace(): 替换字符串, 不区分大小写
    后面的文本
  • str_replace(): 替换字符串, 区分大小写
  • str_ireplace(): 替换字符串, 不区分大小写
  • implode(): 字符串拼接, 相当于 +, 该函数为 join() 的别名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值