• 基础
  1. 开始符和结束符:/;
  2. 特殊字符 包括(/、\);
  3. 或用(|)或者[ ]表示。区别:(I)可匹配多个字符,如(ansnj|cmxc)。[]可匹配单个字符,如[a-z0-9],表示匹配a到z中或者0到9中的任意一个字符。
  4. 非用^表示,一般和[]连用,如[^a-b]表示匹配除了a到z之外的任意一个字符,[abc^]则表示匹配a|b|c|^;
  5. 表示重复次数{n,m} , * , ? , + 。如[a-b]{1,2}表示匹配到aa|ab|ba|bb四种可能,*表示重复次数为0次或者多次,?表示0或一次,+表示一次货多次;
  6. .表示除换行符外的任意字符
  7. \f  匹配一个换页符。等价于 \x0c 和 \cL。
    \n  匹配一个换行符。等价于 \x0a 和 \cJ。
    \r  匹配一个回车符。等价于 \x0d 和 \cM。
    \s  匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
    \S  匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
    \t  匹配一个制表符。等价于 \x09 和 \cI。
    \v  匹配一个垂直制表符。等价于 \x0b 和 \cK。
  • 注意
  1. /和\在正则表达式中都需要用\转义。
  2. 如果要匹配以上描述的任意字符都需要用\转义,如要匹配一个+号,就需要写为\+;
  3. \需要与以上描述的任意字符连用都需要转义,如/\\\[h-i]/则匹配的字符串为\h或者\i;
  4. [^] 这样的连用是错误,若想匹配^,则用\^表示,但[a^]则可以表示a或者^中的其中一个字符。
  5. 贪婪匹配:/.*+/ 使正则表达式尽可能的匹配多的字符
    惰性匹配:/.*?/ 使正则表达式尽可能少的匹配字符
    元字符包含 [] () ^ $ ~ . ? + * - \ | {} 需要匹配本体时需要转义(加\)
    常用的转义字母 : \d (0-9) \D (任意非十进制字符) \w (任意字母和数字和下划线) \W(任意非字母和非数字和非下划线) \n(换行符) \r(回车) \t(水平制表符) \f (换页)

  • 例子分析
/*  
 * 邮件匹配 分三部分 @前为一个整体 @后到.为一个整体 .之后为一个整体
 * part1 : 至少有一个字母或数字或下划线(即 \w) 由 -或者.或者+ 拼接的 一或多部分 可得正则为 \w+([\.\-\+]\w+)*
 * 如 :123-11+33_.aa
 * part2 : 与part1相似,但没有+号的连接符 \w+([\.\-]\w+)*
 * 如:123-11.cn
 * part3 :与part2一致 \w+([\.\-]\w+)*
 * 如: com.cn
 * */
/* $pattern = '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/';
$subject = '925224611@qq.com';
$subject = '192-168-1-0-1@qq.com';
$subject = '192*168+1.0-1@qq.com';
$res = preg_match($pattern, $subject , $arr_data);

var_dump($res);
echo '<pre>'; print_r($arr_data);  */

$pattern = '/^[\w-]$/';
$subject = '925224611@qq.com';
$subject = '192-168-1-0-1@qq.com';
$subject = '192*168+1.0-1@qq.com';
$subject = '-';
$res = preg_match($pattern, $subject , $arr_data);

var_dump($res);
echo '<pre>'; print_r($arr_data);

/* 
 * 网站地址由三部分组成:
 * part1 : 是一个固定的部分 http(s)?:\/\/
 * part2 : 是域名部分(至少两级域名)  ([\w\-]+\.)+[\w\-]+
 * part3 : 其他路径和参数部分 (\/[\w\-\/\?=&%]*)?
 *  */

$pattern = '/^http(s)?:\/\/([\w\-]+\.)+[\w\-]+(\/[\w\-\.\/\?%&=]*)?$/';
$subject = 'http://192.168.0.1/erp/index.php/Home/WlZj/tableList.html?&draw=1&columns%5B0%5D%5Bdata%5D=&columns%5B0%5D%5Bname%5D=&columns%5B0%5D%5Bsearchable%5D=true&columns%5B0%5D%5Borderable%5D=false&columns%5B0%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B0%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B1%5D%5Bdata%5D=hh&columns%5B1%5D%5Bname%5D=&columns%5B1%5D%5Bsearchable%5D=true&columns%5B1%5D%5Borderable%5D=true&columns%5B1%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B1%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B2%5D%5Bdata%5D=quarter&columns%5B2%5D%5Bname%5D=&columns%5B2%5D%5Bsearchable%5D=true&columns%5B2%5D%5Borderable%5D=true&columns%5B2%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B2%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B3%5D%5Bdata%5D=aunit&columns%5B3%5D%5Bname%5D=&columns%5B3%5D%5Bsearchable%5D=true&columns%5B3%5D%5Borderable%5D=true&columns%5B3%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B3%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B4%5D%5Bdata%5D=confnum&columns%5B4%5D%5Bname%5D=&columns%5B4%5D%5Bsearchable%5D=true&columns%5B4%5D%5Borderable%5D=false&columns%5B4%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B4%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B5%5D%5Bdata%5D=status&columns%5B5%5D%5Bname%5D=&columns%5B5%5D%5Bsearchable%5D=true&columns%5B5%5D%5Borderable%5D=false&columns%5B5%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B5%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B6%5D%5Bdata%5D=&columns%5B6%5D%5Bname%5D=&columns%5B6%5D%5Bsearchable%5D=true&columns%5B6%5D%5Borderable%5D=false&columns%5B6%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B6%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B7%5D%5Bdata%5D=remark&columns%5B7%5D%5Bname%5D=&columns%5B7%5D%5Bsearchable%5D=true&columns%5B7%5D%5Borderable%5D=false&columns%5B7%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B7%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B8%5D%5Bdata%5D=&columns%5B8%5D%5Bname%5D=&columns%5B8%5D%5Bsearchable%5D=true&columns%5B8%5D%5Borderable%5D=false&columns%5B8%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B8%5D%5Bsearch%5D%5Bregex%5D=false&order%5B0%5D%5Bcolumn%5D=1&order%5B0%5D%5Bdir%5D=desc&start=0&length=10&search%5Bvalue%5D=&search%5Bregex%5D=false&_=1560409514623';

//$subject = 'https://www.baidu.com/s?ie=UTF-8&wd=%E7%99%BE%E5%BA%A6';

//$path = '/^http(s)?:\/\/([\w\-]\.)+([\w\-])+(\/[\w\.\/\?\-=&%]*)?$/';
$res = preg_match($pattern, $subject , $arr_data);

var_dump($res);
echo '<pre>'; print_r($arr_data);