**用于字符串的匹配,查找,替换,分割。**
语法:“/表达式/[修正符]”
## 1.定界符
'/'可以是其他符号,但不能是字符数字,斜线\\
## 2.原子
正则最基本组成单元,每个模式最少包含一个。
普通字符,
需要使用\转义的特殊字符(",\*?),
非打印字符:\f换页,\n换行,\r回车,\t制表符
通用字符:\d匹配0-9,\D非\\d,\w字母数字下线,\W非字\w,\s,空白
自定义原子表:[。。。]
表达式边界:^必须以此开头, $必须以此结尾。
单词边界: "/b",
/\bis\b/,匹配is,不匹配this,island
/bis,匹配is和island,不匹配this。
\Bis\B,只匹配单词内部
重复匹配:
{m}, {m},{m,},{m,n}
*任意次,+至少一次,?最多一次
任何字符: .匹配换行符以外任何字符。 使用".\*",匹配任何字符。
## 3.原子表-方括号表达式。
[abc] ,表示一个字符 a或b或c \\[a-z\]\[0-9\] \\[^] 取反
/\[a-zA-Z]/匹配所有大小写字母
/^[a-z]\[0-9]$/匹配比如“z2”、 “t6” 、“g7”
/0[xX]\[0-9a-fA-F\]/匹配一个简单的十六进制数字,如“0x9”。
/0?\[ xX\]\[0-9a-fA-F\]+/匹配十六进制数字,可以匹配“0x9B3C”或者“X800”等。
\*\\d 匹配一个数字;等价于\[0-9\]
\*\\D 匹配除数字以外任何一个字符;等价于\[^0-9\]
\*\\w 匹配一个英文字母、数字或下划线;等价于\[0-9a-zA-Z\_\]
\*\\W 匹配除英文字母、数字和下划线以外任何一个字符;等价于\[^0-9a-zA-Z\_\]
\*\\s 匹配一个空白字符;等价于\[\\f\\n\\r\\t\\v\]
\*\\S 匹配除空白字符以外任何一个字符;等价于\[^\\f\\n\\r\\t\\v\]
## 4.模式单元
()可以做一个单元被单独使用。
(abc) ,一个整体,abc \\\\ (red|blue) 字串red或blue
/(Dog)+/匹配的“Dog”、“DogDog”、“DogDogDog”,
/You (very )+ old/匹配“You very old”、“You very very old”
/Hello (world|earth)/匹配“Hello world”、“Hello earth”
## 5.重新使用模式单元(子存储)。
系统会自动将模式单元中的匹配一次储存起来。在需要时使用\\\\1,\\\\2,或\\$1,\\$2,使用。
不使用子存储:(?:)
拒绝贪婪匹配(.\*?),贪婪匹配(.\*)
## 6.模式修正符:
i 不区分大小写。
m字符视为多行。
相关函数:
preg_match -- 进行正则表达式匹配,只匹配一次,返回1,否则0,
preg_match_all -- 进行全局正则表达式匹配 , 返回共计匹配的个数。
和下面的一样,不同的是匹配到最后(全局匹配)
格式:preg_match("正则表达式","被匹配的字串",存放结果的变量名,获取匹配索引位置,起始偏移量)
起始偏移量:从指定位置开始匹配
preg_grep -- 返回与模式匹配的数组单元
preg_replace -- 执行正则表达式的搜索和替换
preg_replace_callback -- 用回调函数执行正则表达式的搜索和替换
preg_quote -- 转义正则表达式字符
preg_split,通过正则分割字符串。
## 例:
手机: \[1\]\[3-8\]\[0-9\]{9}
邮箱: /^\[0-9a-zA-Z\_-\]+@\[0-9a-zA-Z\_-\]+(\\.\[0-9a-zA-Z\_-\]+){0,3}$/
子存储:
$str="AABBCC";
echo preg\_replace("/(.\*?)/", "\\$1", $str); \\\\拒绝子存储 (?:)
preg\_replace("/(\\d{4})-(\\d{2})-(\\d{2})/","\\$2/\\$3/\\$1",'2016-2-16');
- 消息队列
- 为什么要用消息队列
- 各种消息队列产品的对比
- 消息队列的优缺点
- 如何保证消息队列的高可用
- 如何保证消息不丢失
- 如何保证消息不会重复消费?如何保证消息的幂等性?
- 如何保证消息消费的顺序性?
- 基于MQ的分布式事务实现
- Beanstalk
- PHP
- 函数
- 基础
- 基础函数题
- OOP思想及原则
- MVC生命周期
- PHP7.X新特性
- PHP8新特性
- PHP垃圾回收机制
- php-fpm相关
- 高级
- 设计模式
- 排序算法
- 正则
- OOP代码基础
- PHP运行原理
- zavl
- 网络协议new
- 一面
- TCP和UDP
- 常见状态码和代表的意义以及解决方式
- 网络分层和各层有啥协议
- TCP
- http
- 二面
- TCP2
- DNS
- Mysql
- 锁
- 索引
- 事务
- 高可用?高并发?集群?
- 其他
- 主从复制
- 主从复制数据延迟
- SQL的语⾔分类
- mysqlQuestions
- Redis
- redis-question
- redis为什么那么快
- redis的优缺点
- redis的数据类型和使用场景
- redis的数据持久化
- 过期策略和淘汰机制
- 缓存穿透、缓存击穿、缓存雪崩
- redis的事务
- redis的主从复制
- redis集群架构的理解
- redis的事件模型
- redis的数据类型、编码、数据结构
- Redis连接时的connect与pconnect的区别是什么?
- redis的分布式锁
- 缓存一致性问题
- redis变慢的原因
- 集群情况下,节点较少时数据分布不均匀怎么办?
- redis 和 memcached 的区别?
- 基本算法
- MysqlNew
- 索引new
- 事务new
- 锁new
- 日志new
- 主从复制new
- 树结构
- mysql其他问题
- 删除
- 主从配置
- 五种IO模型
- Kafka
- Nginx
- trait
- genergtor 生成器
- 如何实现手机扫码登录功能
- laravel框架的生命周期