php正则表达式

 

正则表达式考点

引子: 至少写出一种验证139开头的11位手机号的正则表达式的
 

正则表达式的作用:  分割, 查找,匹配,替换字符串

分隔符: 正斜线(/), hash符号(#),取反(~)

通用原子: \d(10进制0-9), \D,      \w(数字字母下划线), \W(\w取反),     \s(空白符), \S

\d 10进制0-9
\D 任意一个非十进制数字
\w 数字字母下划线
\W 任意个非单词字符
\s 任意一个空白字符(空格、换行符、换页符、回车符、字表符)
\S 任意一个非空白字符

补充:不可见字符:

字符 含义
\a 报警
\b 退格
\f 换页
\n 换行
\r 回车
\t 字表符

元字符:

. 除换行符之外的任意字符
* 前面的内容出现 大于等于0次
前面的内容出现0次或者1次
^ 必须以其开头
+ 前面的内容出现1次或者多次
{n} 前面的内容恰巧出现n次
{n,} 前面的内容出现大于等于n次
{n,m} 前面的内容出现次数介于n和m中间
[] 匹配一个集合,[123]表示匹配1,2,3
() 后向引用或者可以当做一个整体
[^] [^123],  除了1,2,3之外的字符
| 或者
[-] [1-9] 数字1到9
$ 必须以其结尾

模式修正符:

i 不区分大小写
m 通过分隔符进行分割
e 对匹配出的内容进行处理,php7已经remove
s 修正换行
U 取消贪婪模式
x 忽略模式中的空白符
A 必须以模式开头
D 修正模式对反斜杠的忽略
u 对中文进行匹配的时候能用到

后向引用

$str = 'abc';

$pattern = '/(.*)<\/b>/';

preg_replace($pattern, '\\1', $str );//匹配abc

贪婪模式

$str = 'abcbcd';

$pattern = '/.*?<\/b>/';//取消贪婪模式

//$pattern = '/.*/U';//取消贪婪模式

preg_replace_all($pattern, '\\1',  $str); //匹配出abc和bcd

正则表达式pcre函数

preg_match,preg_match_all, preg_replace, preg_replace_all

中文匹配

utf-8 汉字编码范围: 0x4e00-0x9fa5  需要使用u模式修正符使字符串被当成utf-8

ANSI(gb2312):   0xb0-0xf7, 0xa1-0xfe  需要使用chr将ascii码转码为字符

$str = '中文';

$pattern = '/[\x{4e00}-\x{9fa5}]+/u';

//$pattern = '['.chr(0xb0).'-'.chr(0xf7).']['.chr(0xa1).'-'.chr(0xfe).']';

preg_match($pattern, $str, $match);

 

回到最初的问题:

自左向右的顺序使用正则表达式的原子和元字符进行拼接,最终加入模式修正符

$str = '13988888888';

$pattern  = '^139\d{8}$';

preg_match($pattern, $str, $match);

补充练习: URL, Email, IP, 手机号码等

请写出一个正则表达式,取出页面中所有img标签中的src值

$str = 'test';

$pattern = '//';

preg_match($pattern, $str, $match);

 

参考:

慕课网

https://www.cnblogs.com/hellohell/p/5718319.html

https://www.cnblogs.com/leezhxing/p/4333773.html

 

 

 

 

 

 

你可能感兴趣的:(php)