-
正则表达式的作用: 分割 查找 匹配 替换
-
分隔符: 正斜线(/) hash符号(#) 取反符号(~)
-
通用原子: \d \D \w \W \s \S
\d: 匹配一个0~9的数字 \D: 非0~9的数字 \w: 用于匹配字符 数字 下划线 \W: 非字符 数字 下划线 \s: 匹配任何空白字符,包括空格、制表符、换页符等等 \S: 匹配任何非空白字符。 -
元字符: . * ? ^ $ + {n} {n,} {n,m} [] () [^] | [-]
.: 匹配除换行符\n之外的任何单个字符 *: 匹配前面的子表达式零次或多次 ?: 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符 ^: 匹配输入字符串的开始位置 $: 匹配输入字符串的结束位置 +: 匹配前面的子表达式一次或多次 {n}: 匹配确定的 n 次 {n,}: 匹配至少 n 次 {n,m}: 匹配 n~m 次 []: 集合 (): 整体或后向引用 -
模式修正符:i m e s U x A D u
i: 不区分大小写 U: 取消贪婪模式 -
正则表达式:后向引用
$str = '<b>abc</b>'; $pattern = '/<b>(.*)<\/b>/U'; $str2 = preg_replace($pattern, '\\1', $str); -
正则表达式:贪婪模式
$str = '<b>abc<\b><b>bcd<\b>'; $pattern = '/<b>(.*)<\/b>/U'; preg_match_all($pattern, $str, $str2); -
正则表达式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'; preg_match($pattern, $str, $match); -
正则表达式实例
1.以139开头的手机号 $str = '13988888888'; $pattern = '/^139\d{8}$/'; preg_match($pattern, $str, $match); print_r($match); 2.取标签img中src的值 $str = '<img class="navup" src="/images/up.gif" alt="PH">PHP 正则表达式(PCRE)</a></p><img class="navup" src="/images/up.gif" alt="PHP">PHP正则表达式(PCRE)</a></p>'; $pattern = '/<img.*src="(.*)".*\/?>/Ui'; preg_match_all($pattern, $str, $match); print_r($match); 3.把学号中间7位替换成* $str = '1541234567444'; $pattern = '/^(\d)(.*)(\d{3})$/U'; $replacement = '$1***$3'; preg_replace($pattern, $replacement, $str)