正则表达式,用于处理字符串,补充字符处理函数的不足。
基础1. 定界符
定界符没有严格要求,可以是“/”,“@”,“#” 或其它,看个人喜好。定界符是成对出现的,正则表达式前后各一个。
例:$status = preg_match('/a/','abc') //在字符串abc中,是否包含字符a
注:$status = preg_match('@a@','abc')
$status = preg_match('#a#','abc')
得到的结果相同
基础2. 元字符
\d,匹配任一数字 【0-9】
例:$status = preg_match('/\d/','abc121') //在字符串abc121中,是否包含数字
\D,匹配除了数字之外的字符 【^0-9】
例:$status = preg_match('/\D/','abc121') //在字符串abc121中,是否包含除数字以外的字符
\w,匹配字符串中是否含有a-zA-Z0-9_ 【a-zA-Z0-9_】
例:$status = preg_match('/\w/','abc121') //在字符串abc121中,是否含有字符a-zA-Z0-9_
\W,匹配字符串中是否含有除了a-zA-Z0-9_ 【^a-zA-Z0-9_】
例:$status = preg_match('/\W/','abc121#') //在字符串abc121#中,是否含有除了a-zA-Z0-9_的字符
\s,匹配换行、分页、空格等字符 【任意空白】
例:$status = preg_match('/\s/','abc 12 1#') //在字符串abc 12 1#中,是否含有空白字符
\S,匹配除空白之外的字符 【^任意空白】
例:$status = preg_match('/\S/','abc 12 1#') //在字符串abc 12 1#中,是否含有空白字符
\n,换行符,\t,制表符
基础3. 原子表【abc】
原子表中的字符互相之间无顺序或组合关系,每个字符是独立的
例:$status = preg_match('/[abc]/','b2a1c') //在字符串b2a1c中,是否含有字符a或b或c
$status = preg_match('/[6-9]/','b2a1c') //在字符串b2a1c中,是否含有6-9之间的数字
基础4. 原子组 (abc)
原子组中的字符是整体,完全匹配,包括顺序、字符个数、数值
$status = preg_match('/(ab)/','ab') //在字符串ab中,是否含有字符ab
基础5. 重复匹配
“.”: 点,匹配 除换行符外任意字符
“*”:星,匹配 0个或多个字符
“+”:加,匹配 1个或多个字符
“?”:问号,匹配 0个或1个字符
例:$status = preg_match('/^.*$/','') //匹配0个到多个字符,返回1
例:$status = preg_match('/^.+$/','') //匹配1个到多个字符,返回0
例:$status = preg_match('/^.+$/','a') //匹配1个到多个字符,返回1
例:$status = preg_match('/^\d?$/','1') //匹配0个或1个字符,返回1
基础6. 禁止贪婪匹配
例:$str = '<h1>我爱你</h1><h1>哈尔滨</h1>';
//$preg = '/<h1>(.+)<\/h1>/'; //贪婪匹配,会得到第一个h1开始,最后一个/h1结尾的所有结果,不是我们想要的
$preg = '/<h1>(.+?)<\/h1>/'; //禁止贪婪匹配,每次仅匹配一个h1开始,/h1结尾的结果
$preg = '/<h1>.*<\/h1>/U'; //禁止贪婪匹配的另一种方式
preg_match_all($preg,$str,$matches); //使用preg_match_all方法,返回所有匹配到的结果(数组)