首页 > 代码库 > php基础知识(5)正则表达式
php基础知识(5)正则表达式
一、匹配次数
(1) * 匹配前面的子表达式零次或多次
(2) + 匹配前面的子表达式一次或多次,+ 等价于 {1,}
(3) ? 匹配前面的子表达式零次或一次,? 等价于 {0,1}
(4){n} n 是一个非负整数,匹配确定的n 次
(5){n,} n 是一个非负整数,至少匹配n 次
(6){n,m} m 和 n 均为非负整数,最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格
二、匹配值
(1) x|y 匹配 x 或 y
(2)[xyz] 字符集合
(3)[^xyz] 负值字符集合
(4)[a-z] 字符范围,匹配指定范围内的任意字符
(5)[^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符
(1)\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符
(2)^ 匹配输入字符串的开始位置
(3) $ 匹配输入字符串的结束位置
(4) ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的
(5) . 匹配除 "\n" 之外的任何单个字符。要匹配包括 ‘\n‘ 在内的任何字符,请使用象 ‘[.\n]‘ 的模式
三、元字符
(1)\d 匹配一个数字字符。等价于 [0-9]
\D 匹配一个非数字字符。等价于 [^0-9]
(2)\w 匹配包括下划线的任何单词字符。等价于‘[A-Za-z0-9_]‘
\W 匹配任何非单词字符。等价于‘[^A-Za-z0-9_]‘
(3)\b 匹配一个单词边界,也就是指单词和空格间的位置
\B 匹配非单词边界
(4)\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
(5)\f 匹配一个换页符。等价于 \x0c 和 \cL
(6)\n 匹配一个换行符。等价于 \x0a 和 \cJ
(7)\r 匹配一个回车符。等价于 \x0d 和 \cM
(8)\t 匹配一个制表符。等价于 \x09 和 \cI
(9)\v 匹配一个垂直制表符。等价于 \x0b 和 \cK
四、正则函数
1、preg_grep--返回与模式匹配的数组单元,结果使用从输入数组来的键名进行索引,如果不希望这样的结果,用array_values()对结果重新索引。
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
2、preg_match_all -- 进行全局正则表达式匹配
$html = "<b>bold text</b><a href=http://www.mamicode.com/howdy.html>click me";
preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
for ($i=0; $i< count($matches[0]); $i++) {
echo "matched: ".$matches[0][$i]."\n"."<br/>";
echo "part 1: ".$matches[1][$i]."\n"."<br/>";
echo "part 2: ".$matches[3][$i]."\n"."<br/>";
echo "part 3: ".$matches[4][$i]."\n\n"."<br/>";
}
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_SET_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_PATTERN_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";
3、preg_match -- 进行正则表达式匹配,在第一次匹配之后将停止搜索
preg_match("/^(http:\/\/)?([^\/]+)/i","http://www.php.net/index.html", $matches); // 从 URL 中取得主机名
$host = $matches[2]; //$host = www.php.net
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches); // 从主机名中取得后面两段
echo "domain name is: {$matches[0]}\n"."<br/>"; //domain name is: php.net
4、preg_replace -- 执行正则表达式的搜索和替换
//逆向引用后面紧接着数字的用法
$string = "April 15, 2003";
$pattern = "/(\w+) (\d+), (\d+)/i";
$replacement = "\${1}1,\$3";
print preg_replace($pattern, $replacement, $string);
//在 preg_replace() 中使用索引数组
$string = "The quick brown fox jumped over the lazy dog.";
$patterns[0] = "/quick/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";
$replacements[2] = "bear";
$replacements[1] = "black";
$replacements[0] = "slow";
print preg_replace($patterns, $replacements, $string);//The bear black slow jumped over the lazy dog.
//替换数个值
$patterns = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/","/^\s*{(\w+)}\s*=/");
$replace = array ("\\3/\\4/\\1\\2", "$\\1 =");
print preg_replace ($patterns, $replace, "{startDate} = 1999-5-27");//$startDate = 5/27/1999
//使用 /e 修正符
//这将使输入字符串中的所有 HTML 标记变成大写。
preg_replace ("/(<\/?)(\w+)([^>]*>)/e","‘\\1‘.strtoupper(‘\\2‘).‘\\3‘",$html_body);
===================================================================================================
一、整数
1、整数 : "/^-?\d+$/"
2、正整数: "/^[0-9]*[1-9][0-9]*$/"或者"/^[1-9]+$/"
3、负整数: "/^-[0-9]*[1-9][0-9]*$/"
4、非正整数: "/^((-\d+)|(0+))$/"
5、非负整数: "/^\d+$/"
二、浮点数
1、浮点数: "/^(-?\d+)(\.\d+)?$/" //即所有的数字
2、正浮点数 : "/^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/"
3、负浮点数: "/^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/"
4、非正浮点数: "/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/" //(负浮点数 + 0)
5、非负浮点数: "/^\d+(\.\d+)?$/" // 0+正整数+整数(798.687)
三、英文字母
1、纯英文字母: "/^[A-Za-z]+$/"
2、大写英文字符: "/^[A-Z]+$/"
3、小写英文字母: "/^[a-z]+$/"
4、英文字母和数字: "/^[A-Za-z0-9]+$/"
5、英文字母和下划线: "/^\w+$/"
四、中文
1、中文、英文、数字及下划线:"/^[\u4e00-\u9fa5_a-zA-Z0-9]+$/"
2、中文字符:"/[^u4E00-u9FA5]/" //只要语句中有汉字就行
3、双字节字符(包括汉字在内):"/[^\x00-\xff]/"
4、gb2312:if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str))
utf-8 :if(!preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
5、Unicode编码中的汉字范围:"/^[\u2E80-\u9FFF]+$/"
五、
19、空行:"/\n[\s| ]*\r/"
20、/[^uFF00-uFFFF]/g
21、首尾空格:"/(^\s*)|(\s*$)/"
22、sql语句:/"^(select|drop|delete|create|update|insert).*$/"
23、信息中的任何数字 :"/(-?\d*)(\.\d+)?/"
六、应用
1、验证url
(1)、"/^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/"
(2)、"/^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$/"
(3)、 "/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\‘:+!]*([^<>\"\"])*$/"
(4)、"/http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? /"
(5)、‘/<a href="http://www.mamicode.com/(.*?)">(.*?)<\/a>/‘
(6)、"/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/"
2、IP地址
(1)、"/(\d+)\.(\d+)\.(\d+)\.(\d+) /"
(2)、"/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/"
(3)、"/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/"
3、电话区号
(1)、"/^0\d{2,3}$/"
(2)、"/^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/" //7或者8位
(3)、"/^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/" //7或者8位
4、手机号码
(1)、"/^[(86)|0]?(13\d{9})|(15\d{9})|(18\d{9}$/)/"
5、email地址
(1)、"/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/" //xxxxx@xxx.xxx (x代表任何字母和数字,不限个数)
(2)、"/^\w+@\w+\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2})?$/"
(3)、"/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/"
(4)、"/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/"
6、邮政编码
(1)、"/[1-9]{1}(\d+){5}/"
(2)、"/^[1-9]\d{5}$ /"
7、时间
(1)、年-月-日: "/^(d{2}|d{4})-((0([1-9]{1}))|(1[0|1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/"
(2)、月/日/年: "/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/"
8、账号:"/^[a-zA-Z][a-zA-Z0-9_]{4,15}$ /" //(字母开头,允许5-16字节,允许字母数字下划线)
用户名:"/^[a-z0-9_-]{3,16}$/"
密 码:"/^[a-z0-9_-]{6,18}$/"
9、图片链接
(1)、网络链接:"/(h|H)(r|R)(e|E)(f|F) *= *(‘|‘)?(\w|\\|\/|\.)+(‘|‘| *|>)?/"
(2)、图片链接:"/(s|S)(r|R)(c|C) *= *(‘|‘)?(\w|\\|\/|\.)+(‘|‘| *|>)?/"
10、验证身份证
(1)、"/^\d{6}((1[89]|(2\d)))\d{2}((0\d)|(1[0-2]))((3[01])|(0-2)\d)\d{3}(\d|x)$/i/"
11、html标签
(1)、"/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/"
(2)、"/<(.*)>.*<\/\1>|<(.*) \/>/"
13、删除代码\\注释:"(?<!http:|\S)//.*$"