php 正则表达式

  • 基础
  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。
     匹配一个换行符。等价于 x0a 和 cJ。
     匹配一个回车符。等价于 x0d 和 cM。
    s  匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ f v]。
    S  匹配任何非空白字符。等价于 [^ f v]。
     匹配一个制表符。等价于 x09 和 cI。
    v  匹配一个垂直制表符。等价于 x0b 和 cK。
  • 注意
  1. /和在正则表达式中都需要用转义。
  2. 如果要匹配以上描述的任意字符都需要用转义,如要匹配一个+号,就需要写为+;
  3. 需要与以上描述的任意字符连用都需要转义,如/\[h-i]/则匹配的字符串为h或者i;
  4. [^] 这样的连用是错误,若想匹配^,则用^表示,但[a^]则可以表示a或者^中的其中一个字符。
  5. 贪婪匹配:/.*+/ 使正则表达式尽可能的匹配多的字符
    惰性匹配:/.*?/ 使正则表达式尽可能少的匹配字符
    元字符包含 [] () ^ $ ~ . ? + * - | {} 需要匹配本体时需要转义(加)
    常用的转义字母 : d (0-9) D (任意非十进制字符) w (任意字母和数字和下划线) W(任意非字母和非数字和非下划线) (换行符) (回车) (水平制表符) 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); 
原文地址:https://www.cnblogs.com/Acsii/p/8205747.html