PHP面试 PHP基础知识 六(正则表达式)
正则表达式
正则表达式的作用
分割、查找、匹配、替换字符串
分隔符:正斜线(/)、hash符号(#)、以及取反符号(~)
通用原子:\d(代表十进制的0-9)、\D (取反除了0-9)、\w(数字、字母、下划线)
\W(除了数字字母下划线)、\s(空白符)、\S(除了空白符)
元字符: . * ? ^ $ + {n} {n,m} [] () [^] | [-]
. 点代表的意思是除了换行符的任意字符
* 代表匹配前面的内容出现0次或者多次
? 代表匹配前面的内容出现0次或者1次
^ 代表匹配输入字符串的开始位置
$ 代表匹配输入字符串的结尾位置
+ 代表匹配前面的内容出现1次或者多次
{n} n是一个非负整数,匹配确定的n次
{n,m} n和m均为非负整数,最少匹配n次最多匹配m次
[ ] 定义匹配字符范围
() 标记一个子表达式的开始和结束位置
[^] 取反 除了中括号里面的其他都匹配
| 或者的意思
[-] 代表的是一个范围 比如[ 0 - 9 ]
模式修正符:i m e s U x A D u
i 不区分大小写
m 将字符串视为多行,不管是那行都能匹配
e 配合函数preg_replace()使用 //PHP7.0已经取消
s 修正点和换行
U 只匹配最近的一个字符串,不重复匹配 取消贪婪模式
x 将模式中的空白符忽略
A 强制从目标字符串开头匹配
D 使用$限制结尾字符,则不允许结尾有换行
u 中文匹配
后向引用:
$str = "<p>abc</p>"; $pattern = '/<p>(.*)<\/p>'; //将str字符串替换成不带p标签的 preg_replace( $pattern, '\\1',$str ); //反斜线1代表的意思就是第一个括号里面匹配到的内容
贪婪模式
$str ="<p>abc</p><p>bcd</p>"; $pattern = '/<p>.*?<\/p>/'; // ?可以取消贪婪 preg_replace_all($pattern, '\\1',$str); $pattern = '/<p>.*<\/p>/U'; //U也可以取消贪婪
正则表达式PCRE函数: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将Ascii码转换为字符
$str = "中国你好"; $pattern = '/[\x{4e00}-\x{9fa5}]+/u'; //utf-8 $pattern = '/['.chr(0xb0).'-'.chr(0xf7)']['.chr(0xa1).'-'.chr(0xfe)']/'; preg_match($pattern ,$str ,$match); var_dump($match);