- 基础
- 开始符和结束符:/;
- 特殊字符 包括(/、\);
- 或用(|)或者[ ]表示。区别:(I)可匹配多个字符,如(ansnj|cmxc)。[]可匹配单个字符,如[a-z0-9],表示匹配a到z中或者0到9中的任意一个字符。
- 非用^表示,一般和[]连用,如[^a-b]表示匹配除了a到z之外的任意一个字符,[abc^]则表示匹配a|b|c|^;
- 表示重复次数{n,m} , * , ? , + 。如[a-b]{1,2}表示匹配到aa|ab|ba|bb四种可能,*表示重复次数为0次或者多次,?表示0或一次,+表示一次货多次;
- .表示除换行符外的任意字符
- \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。
- 注意
- /和\在正则表达式中都需要用\转义。
- 如果要匹配以上描述的任意字符都需要用\转义,如要匹配一个+号,就需要写为\+;
- \需要与以上描述的任意字符连用都需要转义,如/\\\[h-i]/则匹配的字符串为\h或者\i;
- [^] 这样的连用是错误,若想匹配^,则用\^表示,但[a^]则可以表示a或者^中的其中一个字符。
-
贪婪匹配:/.*+/ 使正则表达式尽可能的匹配多的字符
惰性匹配:/.*?/ 使正则表达式尽可能少的匹配字符
元字符包含 [] () ^ $ ~ . ? + * - \ | {} 需要匹配本体时需要转义(加\)
常用的转义字母 : \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);