吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3300|回复: 9
收起左侧

[其他转载] PHP 笔记——正则表达式

  [复制链接]
He110 发表于 2016-11-30 14:03
感觉正则好高深,虽然语法简单,但是要到真正能用的程度还有很长的路要走,楼主准备先啃啃正则,至少得会一些简单的匹配,所以接下来可能要先断更了,对各位关注这个系列的小伙伴们说声抱歉啦

觉得排版难看的可以在文末下载 Markdown 文档观看,观看本文建议先观看其他笔记——PHP 环境配置PHP 基础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(): 替换字符串, 不区分大小写
  • implode(): 字符串拼接, 相当于 +, 该函数为 join() 的别名



Markdown 文档下载:链接: http://pan.baidu.com/s/1hsfro0k 密码: wnnt
实例链接:链接: http://pan.baidu.com/s/1pL4LIrT 密码: jhun

链接掉了请私信


免费评分

参与人数 1热心值 +1 收起 理由
酱爆你个西瓜头 + 1 继续支持楼主!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

yy94916 发表于 2016-11-30 14:21
楼主加油。
whjfh 发表于 2016-11-30 14:26
daijia 发表于 2016-11-30 14:36
ShadowY 发表于 2016-11-30 16:20
楼主厉害,表示看不懂
盗水者 发表于 2016-11-30 19:45
正则表达式确实比较难
lizhenxing 发表于 2016-12-1 17:30
跟着楼主一起学习,虽然不太懂这些
派对炸弹 发表于 2016-12-1 23:34 来自手机
多谢分享。正需要
 楼主| He110 发表于 2016-12-4 08:51
正则好高深,研究两天了还是没啥进展,只会匹配一些简单的东西
Hou_snoopy 发表于 2016-12-22 00:28
正则,正则,学习学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 13:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表