# 正則表達式展示
```php
/[a-zA-z]+://[^\s]*/ //匹配URL
/^((https|http|ftp)?://)[^\s]+/ //匹配URL和FTP
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ //匹配URL協議、域、端口及相對路徑
/\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/ //匹配郵箱地址
```
## 正則表達式(結構)
1. 原子
2. 元字符
3. 修正符
4. 預定義字符
5. 特殊字符
6. 分組符
7. 界定符
8. 修正符
9. 正則表達式優先級
---
### 一、原子
**原子**|**描述**
---|---
普通字符| 可打印的字符,在屏幕可看到的字符,如大小寫字母、數字等
非打印字符| 即存在但不可顯示字符,如回車、換行、制表符等
自定義字符| 可以是一個,也可以是集合,用方括號'[ ]'包起來
#### 1.普通字符
**示例**|**描述**
---|---
a-z| 匹配單個小寫字母
A-Z| 匹配單個大寫字母
0-9| 匹配單個數字
> **代碼示例:**
```php
$pattem = '/a/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
#### 2.非打印字符
**示例**|**描述**
---|---
\n| 匹配一個換行符,等價于:\x0a
\r| 匹配一個回車符,等價于:\x0d
\f| 匹配一個換頁符,等價于:\x0c
\t| 匹配一個制表符,等價于:\x09
\v| 匹配一個垂直制表符,等價于:\x0b
> **代碼示例:**
```php
$pattem = '/\n/';
$subject = '11112222333344445555666677778888999900000
aaabbbcccdddeeefffggghhhiiijjjjkkkk';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
#### 3.自定義字符
**示例**|**描述**
---|---
[1234]| 匹配1、2、3、4數字
[0-9]| 匹配數字集合
[a-z]| 匹配小寫字母集合
[A-Z]| 匹配大寫字母集合
[0-9a-zA-Z]| 匹配數字、小寫字母、大寫字母集合
> **代碼示例:**
```php
$pattem = '/[a-z]/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
---
### 二、元字符
* 元字符是修飾原子字符的,可以理解為原子的定語或限定條件
* 元字符不允許單獨使用,必須配合原子,共同工作
( . ) 括號里的匹配符,匹配除換行符之外的任意一個字符
**示例**|**描述**
---|---
12.| 匹配兩個數字,在加任意一個字符
zhu.| 匹配兩個小寫字母,在加任意一個字符
OU.| 匹配兩個大寫字母,在加任意一個字符
> **代碼示例:**
```php
$pattem = '/12./';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk OUYANGKE OUYANGKE zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
( | ) 括號里的匹配符,匹配2個或多個分支
**示例**|**描述**
---|---
12\|67| 匹配12和67
ou\|zhu| 匹配ou和zhu
> **代碼示例:**
```php
$pattem = '/12|67/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
( [ ] ) 括號里的匹配符,匹配方括號內指定的任意一個原子
**示例**|**描述**
---|---
[1234]| 匹配1、2、3、4數字
[0-9]| 匹配數字集合
[a-z]| 匹配小寫字母集合
[A-Z]| 匹配大寫字母集合
[0-9a-zA-Z]| 匹配數字、小寫字母、大寫字母集合
> **代碼示例:**
```php
$pattem = '/[1234]/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
( [^ ] ) 括號里的匹配符, 匹配除方括號內指定原子以外的任意一個原子
**示例**|**描述**
---|---
[^1234]| 匹配去除1、2、3、4數字
[^0-9]| 匹配去除數字集合
[^a-z]| 匹配去除小寫字母集合
[^A-Z]| 匹配去除大寫字母集合
[^0-9a-zA-Z]| 匹配去除數字、小寫字母、大寫字母集合
> **代碼示例:**
```php
$pattem = '/[^1234]/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
( ^ ) 括號里的匹配符,匹配字符串開始位置,一串字符串,必須從這里開始
**示例**|**描述**
---|---
^1| 匹配從1數字開始
\^[0-9]| 匹配從數字集合開始
\^[a-z]| 匹配從小寫字母集合開始
\^[A-Z]| 匹配從大寫字母集合開始
\^[0-9a-zA-Z]| 匹配從數字、小寫字母、大寫字母集合開始
> **代碼示例:**
```php
$pattem = '/^[a-z]/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
( $ ) 括號里的匹配符,匹配字符串結束位置
**示例**|**描述**
---|---
[0-9]$| 匹配從數字集合結束
[a-z]$| 匹配從小寫字母集合結束
[A-Z]$| 匹配從大寫字母集合結束
[0-9a-zA-Z]$| 匹配從數字、小寫字母、大寫字母集合結束
> **代碼示例:**
```php
$pattem = '/[a-z]$/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
---
### 三、量詞(限定符)
{n} 表示前面原子出現n次
**示例**|**描述**
---|---
[0-9]{3}| 匹配從數字連續出現3次
[a-z]{3}| 匹配從小寫字母集合連續出現3次
[A-Z]{3}| 匹配從大寫字母集合連續出現3次
[0-9a-zA-Z]{3}| 匹配從數字、小寫字母、大寫字母集合連續出現3次
> **代碼示例:**
```php
$pattem = '/[0-9]{3}/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
{n,} 表示前面原子出現不少于n次
**示例**|**描述**
---|---
[0-9]{1,}| 匹配從數字連續出現1次或多次
[a-z]{1,}| 匹配從小寫字母集合連續出現1次或多次
[A-Z]{1,}| 匹配從大寫字母集合連續出現1次或多次
[0-9a-zA-Z]{1,}| 匹配從數字、小寫字母、大寫字母集合連續出現1次或多次
> **代碼示例:**
```php
$pattem = '/[0-9]{1,}/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
{n,m} 表示前面原子至少出現n次,最多出現m次
**示例**|**描述**
---|---
[0-9]{1,3}| 匹配從數字連續出現1次或3次
[a-z]{1,3}| 匹配從小寫字母集合連續出現1次或3次
[A-Z]{1,3}| 匹配從大寫字母集合連續出現1次或3次
[0-9a-zA-Z]{1,3}| 匹配從數字、小寫字母、大寫字母集合連續出現1次或3次
> **代碼示例:**
```php
$pattem = '/[0-9]{1,3}/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
( * ) 匹配0次、1次或多次前面原子
**示例**|**描述**
---|---
[0-9]*| 匹配從數字連續出現0次、1次或多次
[a-z]*| 匹配從小寫字母集合連續出現0次、1次或多次
[A-Z]*| 匹配從大寫字母集合連續出現0次、1次或多次
[0-9a-zA-Z]*| 匹配從數字、小寫字母、大寫字母集合連續出現0次、1次或多次
> **代碼示例:**
```php
$pattem = '/[0-9]*/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
( + ) 匹配1次或多次前面原子
**示例**|**描述**
---|---
[0-9]+| 匹配從數字連續出現1次或多次
[a-z]+| 匹配從小寫字母集合連續出現1次或多次
[A-Z]+| 匹配從大寫字母集合連續出現1次或多次
[0-9a-zA-Z]+| 匹配從數字、小寫字母、大寫字母集合連續出現1次或多次
> **代碼示例:**
```php
$pattem = '/[0-9]+/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
(?) 匹配0次或1次前面原子
**示例**|**描述**
---|---
[0-9]?| 匹配從數字連續出現0次或1次
[a-z]?| 匹配從小寫字母集合連續出現0次或1次
[A-Z]?| 匹配從大寫字母集合連續出現0次或1次
[0-9a-zA-Z]?| 匹配從數字、小寫字母、大寫字母集合連續出現0次或1次
> **代碼示例:**
```php
$pattem = '/[0-9]?/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
---
### 四、預定義字符
\d 匹配任意一個十進制數
* 等價于 [0-9]
> **代碼示例:**
```php
$pattem = '/\d/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
\D 匹配任意一個除十進制以外的字符
* 等價于 [^0-9]
> **代碼示例:**
```php
$pattem = '/\D/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
\w 匹配任意一個字母/數字/下劃線字符
* 等價于 [0-9a-zA-Z_]
> **代碼示例:**
```php
$pattem = '/\w/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
\W 匹配任意一個除字母/數字/下劃線之外的字符
* 等價于 [^0-9a-zA-Z_]
> **代碼示例:**
```php
$pattem = '/\W/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
\s 匹配任意一個空白字符(非打印)
> **代碼示例:**
```php
$pattem = '/\s/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
\S 匹配任意一個除空白字符以外的字符
> **代碼示例:**
```php
$pattem = '/\S/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
\b 匹配單詞邊界
> **代碼示例:**
```php
$pattem = '/ouyangke\b/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
\B 匹配除單詞邊界以外的部分
> **代碼示例:**
```php
$pattem = '/yang\B/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
---
### 五、特殊字符
* **特殊字符需要在符號前面增加\轉義**
* **需轉義符號: \ * + ? . | ^ $ [ ] ( )**
> **代碼示例:**
```php
$pattem = '/ \+ /';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk * + ? . | ^ $ [ ] ( ) ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
---
### 六、分組符
* ( ) 匹配其整體為一個原子[模式單元],即多個原子組成的大原子
> **代碼示例:**
```php
$pattem = '/(歐陽克|朱老師)|([0-9])/';
$subject = '我是歐陽克 我是朱老師 asdfsdf212fdhdfgh54674fghjfghjk78907dfghdfghdfgh';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
---
### 七、界定符
> / / 符號是正則表達式的界定符,里面包裹正則表達式。
---
### 八、修正符(在界定符后面)
> 多個修正符可以組合在一起使用
( U ) 表示取消貪婪模式
* 正則表達式有:貪婪模式和懶惰模式
* 正則表達式默認是貪婪模式
> **代碼示例1:**
```php
$pattem = '/ou.*/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
> **代碼示例2:**
```php
$pattem = '/ou.*/U';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
( i ) 表示和模式進行匹配時忽略大小寫
> **代碼示例:**
```php
$pattem = '/ouyangke/i';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk OUYANGKE OUYANGKE ZHULAOSHI ZHULAOSHI';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
( s ) 被匹配的字符串將視為一行來看,包括換行符,換行符將被視為普通字符串。
* ( . ) 括號里的匹配符,匹配除換行符之外的任意一個字符
> **代碼示例:**
```php
$pattem = '/OUYANGKE./s';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk\n OUYANGKE
OUYANGKE
ZHULAOSHI ZHULAOSHI';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
( x ) 模式中的空白忽略不計
> **代碼示例:**
```php
$pattem = '/ 0
0
0/x';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk\n OUYANGKE OUYANGKE ZHULAOSHI ZHULAOSHI';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 輸出匹配次數
var_dump($matches); // 輸出匹配結果
```
### 九、正則表達式優先級(1級最大)
級別|符號|解釋
---|:--:|---
1| \ | 轉義字符
2| ( )、 ( ?: )、 ( ?= )、 [ ]、 | 模式單元與原子表
3| *、 +、 ?、 {n}、 {n,}、 {n,m} | 重復匹配
4| ^、 $、 \b、 \B | 邊界匹配
5| \| | 模式選擇
- 序言
- PHP基礎
- 認識PHP
- 環境安裝
- PHP語法
- 流程控制
- PHP數組
- PHP函數
- PHP類與對象
- PHP命名空間
- PHP7新特性
- PHP方法庫
- PHP交互
- 前后端交互
- 項目常規開發流程
- MySQL數據庫
- 會話控制
- Ajax分頁技術
- 細說函數
- 類與對象
- 對象進階
- 類與對象進階
- OOP面向對象
- 設計模式
- 路由與模板引擎
- 異常類
- PHP爬蟲
- PHP抓取函數
- PHP匹配函數
- 正則表達式
- PHP字符串函數
- 抓取實戰
- PHP接口
- 了解接口
- PHP插件
- PHPSpreadsheet
- ThinkPHP6
- 安裝
- 架構
- 數據庫
- 數據庫操作
- 視圖
- 模版
- 模型
- 雜項
- 命令行
- 交互
- 微信小程序
- 介紹
- 配置
- 組件
- 交互
- API
- 其他知識
- 百度小程序
- 介紹
- 配置
- 組件
- 交互
- API
- 其他知識
- Linux
- 服務器上線流程
- 安裝svn
- MySQL
- 認識MySQL
- MySQL函數
- 雜項
- composer依賴管理工具