常用正则
最后更新于:2022-04-02 02:35:16
[TOC]
## 正则实例
|正则|说明|实例|
|---|---|---|
|身份证|`/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/`||
|手机号|`/^0?(13|14|15|17|18|19)[0-9]{9}$/`||
|银行卡|`/^\d{16}|\d{19}$/`||
|Email|`/^\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}$/`||
|网址|`/^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+$/`||
|电话号码|`/^[0-9-()()]{7,18}$/`||
|日期|`/^\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}$/`|2017-02-51|
|无特殊字符的用户名|`/^[A-Za-z0-9_\-\u4e00-\u9fa5]+$/`|hello@# 不通过|
## 技巧
### 后向引用
```php
$str='abc';
Pattern= '/(.*)<\/b>/';
preg_replace($pattern, '\\1', $str);
```
### 贪婪模式
1. 用`.*?` 取消贪婪模式
`/.*?<\/b>/`
2. 用 `U`取消贪婪
`'/.*<\/b>/U'`
### 常用函数
```
preg_match(),
preg_match_all(),
Preg_replace(), //替换
preg_split() //分割
```
### 中文匹配
UTF-8汉字编码范围是`0x4e00-0x9fa5`,
ANSI(gb2312)环境下,`0xb0-0xf7`,`0xa1-0xfe`
UTF-8要使用u模式修正符使模式字符串被当成UTF-8,
ANSI(gb2312)环境下,要使用chr将Asc码转换为字符
```
$str='中文'
Pattern ='/[\xt{4e001-\x{t9fa5}]+/u';
```
### 匹配 img 的 src 值
```php
$str='';
$pattern='//i' // .*? 为取消贪婪
Preg_match( $Pattern, $str, $match);
```
## 修正模式
```
i 不区分大小写
m 将字符串的每一行分别进行匹配
e 对匹配的结果做PHP语法处理
s 将字符串视为单行,换行符作为普通字符.
U 取消贪婪模式
x 将模式中的空白忽略.
A 强制仅从目标字符串的开头开始匹配.
D 模式中的美元元字符仅匹配目标字符串的结尾.
u utf-8中文匹配
```
## 正则
|元字符|描述|
|:----:|----|
|.|句号匹配任意单个字符除了换行符.|
|?|0或1 |
|`*`|>=0 |
|+|>=1
|[ ]|字符种类. 匹配方括号内的任意字符.|
|[^ ]|否定的字符种类. 匹配除了方括号里的任意字符|
|{n,m}|匹配num个大括号之前的字符 (n <= num <= m).|
|(xyz)|字符集, 匹配与 xyz 完全相等的字符串.|
|||或运算符,匹配符号前或后的字符.|
|\|转义字符,用于匹配一些保留的字符
';
[ ] ( ) { } . * + ? ^ $ \ |
|
|^|从开始行开始匹配.|
|$|从末端开始匹配.|