**用于字符串的匹配,查找,替換,分割。**
語法:“/表達式/[修正符]”
## 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框架的生命周期