第一篇:PHP 正则表达式常用函数使用小结
学习php正则的朋友不得不了解的一些函数,总结下php下正则表达式的调用方法。在PHP中有两套正则表达式函数库。一套是由PCRE(Perl Compatible Regular Expression)库提供的。PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数。另一套是由POSIX(Portable Operation System interface)扩展库提供的。POSIX扩展的正则表达式由POSIX 1003.2定义,一般使用以“ereg_”为前缀命名的函数。
两套函数库的功能相似,执行效率稍有不同。一般而言,实现相同的功能,使用PCRE库的效率略占优势。下面详细介绍其使用方法。
6.3.1 正则表达式的匹配
1.preg_match()
函数原型:int preg_match(string $pattern, string $content [, array $matches])preg_match()函数在$content字符串中搜索与$pattern给出的正则表达式相匹配的内容。如果提供了$matches,则将匹配结果放入其 中。$matches[0]将包含与整个模式匹配的文本,$matches[1]将包含第一个捕获的与括号中的模式单元所匹配的内容,以此类推。该函数只 作一次匹配,最终返回0或1的匹配结果数。代码6.1给出preg_match()函数的一段代码示例。
代码6.1 日期时间的匹配
代码如下:
//需要匹配的字符串。date函数返回当前时间
$content = “Current date and time is ”.date(“Y-m-d h:i a”).“, we are learning PHP together.”;
//使用通常的方法匹配时间
if(preg_match(“/d{4}-d{2}-d{2} d{2}:d{2} [ap]m/”, $content, $m)){
echo “匹配的时间是:”.$m[0].“n”;}
//由于时间的模式明显,也可以简单的匹配
if(preg_match(“/([d-]{10})([d:]{5} [ap]m)/”, $content, $m)){
echo “当前日期是:”.$m[1].“n”;echo “当前时间是:”.$m[2].“n”;} ?>
这是一个简单动态文本串匹配实例。假设当前系统时间是“2006年8月17日13点25分”,将输出如下的内容。
匹配的时间是:2006-08-17 01:25 pm 当前日期是:2006-08-17 当前时间是:01:25 pm 2.ereg()和eregi()
ereg()是POSIX扩展库中正则表达式的匹配函数。eregi()是ereg()函数的忽略大小写的版 本。二者与preg_match的功能类似,但函数返回的是一个布尔值,表明匹配成功与否。需要说明的是,POSIX扩展库函数的第一个参数接受的是正则 表达式字符串,即不需要使用分界符。例如,代码6.2是一个关于文件名安全检验的方法。
代码6.2 文件名的安全检验
代码如下:
//对文件名进行过滤,以保证系统安全
if(!ereg('^[^./][^/]*$', $userfile)){
die('这不是一个非法的文件名!');}
//对用户名进行过滤
if(!ereg('^[^./][^/]*$', $username)){
die('这不是一个无效的用户名');}
//通过安全过滤,拼合文件路径
$thefile = “/home/$username/$filename”;?>
通常情况下,使用与Perl兼容的正则表达式匹配函数perg_match(),将比使用ereg()或eregi()的速度更快。如果只是查找一个字符串中是否包含某个子字符串,建议使用strstr()或strpos()函数。
3.preg_grep()
函数原型:array preg_grep(string $pattern, array $input)
preg_grep()函数返回一个数组,其中包括了$input数组中与给定的$pattern模式相匹配的单元。对于输入数组$input中的每个元素,preg_grep()也只进行一次匹配。代码6.3给出的示例简单地说明了preg_grep()函数的使用。
代码6.3 数组查询匹配 代码如下:
$subjects = array(“Mechanical Engineering”, “Medicine”, “Social Science”, “Agriculture”, “Commercial Science”, “Politics”);
//匹配所有仅由有一个单词组成的科目名
$alonewords = preg_grep(“/^[a-z]*$/i”, $subjects);?>
6.3.2 进行全局正则表达式匹配
1.preg_match_all()
与preg_match()函数类似。如果使用了第三个参数,将把所有可能的匹配结果放入。本函数返回整个模 式匹配的次数(可能为0),如果出错返回False。下面是一个将文本中的URL链接地址转换为HTML代码的示例。代码6.4是 preg_match_all()函数的使用范例。
代码6.4 将文本中的链接地址转成HTML
代码如下:
//功能:将文本中的链接地址转成HTML //输入:字符串
//输出:字符串
function url2html($text){
//匹配一个URL,直到出现空白为止
preg_match_all(“/http://?[^s]+/i”, $text, $links);//设置页面显示URL地址的长度
$max_size = 40;
foreach($links[0] as $link_url){
//计算URL的长度。如果超过$max_size的设置,则缩短。
$len = strlen($link_url);if($len > $max_size){
$link_text = substr($link_url, 0, $max_size).“...”;} else {
$link_text = $link_url;}
//生成HTML文字
$text = str_replace($link_url,“$link_text”,$text);}
return $text;}
//运行实例
$str = “这是一个包含多个URL链接地址的多行文字。欢迎访问http://www.xiexiebang.com“,);
//输出模式替换结果
print preg_replace($patterns, $replacements, $string);?>
输出结果如下。
Name: Thomas Ching”, Email: tom@emailaddress.com
Address: No.5, Wilson St., New York, U.S.A
在preg_replace的正则表达式中可以使用模式修正符“e”。其作用是将匹配结果用作表达式,并且可以进行重新运算。例如:
代码如下:
$html_body = “
TEST
My Picture第二篇:PHP的构造函数-php教程
PHP的构造函数
本php教程主要学习PHP的构造函数。
在面向对象编程中有个很特别的函数,这个函数称为构造函数,是对象被创建时自动调用的方法,用来完成类初始化的工作。因为只要PHP的类一加载就会自动执行此函数,一般初始化的工作都放在此函数中。
1.构造函数和其它函数一样,可以传递参数,可以设定参数默认值。
2.构造函数可以调用属性,可以调用方法。
3.构造函数可以被其它方法显式调用。
在之前的PHP版本中,构造函数使用和类名同名来进行对象的初始化工作,但后面发现如果要更改类名,同时就要更改它的构造方法,所以在PHP5中,就被用__construct()函数来实现.__construct()前面是两个下划线组成,不要以为是一个下划线.与构造函数相对应的是析构函数.当某个对象成为垃圾或者当对象被显式销毁时执行。__destruct()析构函数,是在垃圾对象被回收时执行。
1.不要在程序中调用一个对象的析构函数。
2.析构函数不能带有参数。
3.通常在程序结束后PHP会自动执行垃圾回收。
在这里有个问题先提下,因为我们创建一个类,有时候会有多个实例,那么构造函数是怎么进行调用的呢。php的构造函数调用是从自身向上查找,执行最近的一个来进行调用。
关于这个构造函数在以后再进行补充吧,它的基本知识点就这些吧,相信在遇到__construct()等莫名的函数而不知所措了。至于它的实际应用到时候再说吧,今天就不举例了,好不容易今天不要上班,难得呀。
第三篇:php开发中常用函数总结
php开发中常用函数总结
1.获取IP2.时间的增加3.检查日期是否合法日期4.时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天5.PHP重定向6.获取访问者浏览器7.获取访问者操作系统8.文件格式类9.php生成excel文档10.时间比较问题11.提取页面和浏览器提交的变量,作用相当于使PHP.INI开了全局变量12.读取文件函数13.写入文件函数14.页面快速转向15.产生随机字符串函数16.截取一定长度的字符串(该函数对GB2312使用有效)17.取得客户端IP地址18.判断邮箱地址19.分页(两个函数配合使用)20.获取新插入数据的ID21.获得当前的脚本网址22.把全角数字转为半角数字23.去除HTML标记24.相对路径转化成绝对路径26.取得所有链接27.HTML表格的每行转为CSV格式数组28.将HTML表格的每行每列转为数组,采集表格数据29.返回字符串中的所有单词 $distinct=true 去除重复30.打印出为本PHP项目做出贡献的人员的清单
function GetIP(){ //获取IP
if($_SERVER[“HTTP_X_FORWARDED_FOR”])
$ip = $_SERVER[“HTTP_X_FORWARDED_FOR”];
else if($_SERVER[“HTTP_CLIENT_IP”])
$ip = $_SERVER[“HTTP_CLIENT_IP”];
else if($_SERVER[“REMOTE_ADDR”])
$ip = $_SERVER[“REMOTE_ADDR”];
else if(getenv(“HTTP_X_FORWARDED_FOR”))
$ip = getenv(“HTTP_X_FORWARDED_FOR”);
else if(getenv(“HTTP_CLIENT_IP”))
$ip = getenv(“HTTP_CLIENT_IP”);
else if(getenv(“REMOTE_ADDR”))
$ip = getenv(“REMOTE_ADDR”);
else
$ip = “Unknown”;
return $ip;}?>{downsource}
$dateArr = explode(“-”, $date);$value[$unit] = $int;return date(“Y-m-d”, mktime(0,0,0, $dateArr[1] + $value['m'], $dateArr[2] + $value['d'], $dateArr[0] + $value['y']));}function GetWeekDay($date){ //计算出给出的日期是星期几
$dateArr = explode(“-”, $date);return date(“w”, mktime(0,0,0,$dateArr[1],$dateArr[2],$dateArr[0]));}?>{downsource}
$dateArr = explode(“-”, $date);if(is_numeric($dateArr[0])&& is_numeric($dateArr[1])&& is_numeric($dateArr[2])){ return checkdate($dateArr[1],$dateArr[2],$dateArr[0]);} return false;}function check_time($time){ //检查时间是否合法时间
$timeArr = explode(“:”, $time);if(is_numeric($timeArr[0])&& is_numeric($timeArr[1])&& is_numeric($timeArr[2])){ if(($timeArr[0] >= 0 && $timeArr[0] <= 23)&&($timeArr[1] >= 0 && $timeArr[1] <= 59)&&($timeArr[2] >= 0 && $timeArr[2] <= 59))return true;else return false;} return false;}function DateDiff($date1, $date2, $unit = “"){ //时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天
switch($unit){ case 's': $dividend = 1;break;case 'i': $dividend = 60;break;case 'h': $dividend = 3600;break;case 'd': $dividend = 86400;break;default: $dividend = 86400;} $time1 = strtotime($date1);$time2 = strtotime($date2);if($time1 && $time2)return(float)($time11;mt_srand((double)microtime()* 1000000);for($i = 0;$i < $length;$i++){ $hash.= $chars[mt_rand(0, $max)];}return $hash;}?>{downsource}截取一定长度的字符串(该函数对GB2312使用有效) $length){ if($sss){ $length=$length-3;$addstr=@#...@#;} for($i = 0;$i < $length;$i++){ if(ord($string[$i])> 127){ $wordscut.= $string[$i].$string[$i + 1];$i++;} else { $wordscut.= $string[$i];} } return $wordscut.$addstr;}return $string;}?>{downsource}取得客户端IP地址{downsource}判断邮箱地址{downsource}分页(两个函数配合使用)
global $page,$totalpage;$out=”共“.$totalpage.”页 “;$linkNum =4;$start =($page-round($linkNum/2))>0 ?($page-round($linkNum/2)): ”1“;$end =($page+round($linkNum/2))<$totalpage ?($page+round($linkNum/2)): $totalpage;$prestart=$start-1;$nextend=$end+1;if($page<>1)$out.= ”第一页 “;if($start>1)$out.=”..<< “;for($t=$start;$t<=$end;$t++){ $out.=($page==$t)? ”[“.$t.”] “ : ”$t “;}if($end<$totalpage)$out.=”>>..“;if($page<>$totalpage)$out.= ” 最后页“;return $out;}?>{downsource}获取新插入数据的ID{downsource}//获得当前的脚本网址
if(empty($_SERVER[”QUERY_STRING“]))$nowurl = $scriptName;else $nowurl = $scriptName.”?“.$_SERVER[”QUERY_STRING“];} return $nowurl;}?>{downsource}//把全角数字转为半角数字{downsource}//去除HTML标记“,”>“,$txt);$txt = preg_replace(”/[rn]{1,}/isU“,”rn“,$txt);return $txt;}?>{downsource}//相对路径转化成绝对路径
preg_match('/(http|https|ftp):///', $feed_url, $protocol);$server_url = preg_replace(”/(http|https|ftp|news):///“, ”“, $feed_url);
$server_url = preg_replace(”//.*/“, ”“, $server_url);
if($server_url == ''){
return $content;
}
if(isset($protocol[0])){
$new_content = preg_replace('/href=”//', 'href=“'.$protocol[0].$server_url.'/', $content);
$new_content = preg_replace('/src=”//', 'src=“'.$protocol[0].$server_url.'/', $new_content);
} else {
$new_content = $content;
}
return $new_content;} ?>{downsource}//取得所有链接
preg_match_all('/
return array('name'=>$arr[2],'url'=>$arr[1]);}?>{downsource}//HTML表格的每行转为CSV格式数组]*?>'si”,'“',$table);$table = str_replace(”“,'”,',$table);$table = str_replace(“”,“{tr}”,$table);//去掉 HTML 标记
$table = preg_replace(“'<[/!]*?[^<>]*?>'si”,“",$table);//去掉空白字符
$table = preg_replace(”'([rn])[s]+'“,”“,$table);$table = str_replace(” “,”“,$table);$table = str_replace(” “,”“,$table);$table = explode(”,{tr}“,$table);
array_pop($table);return $table;}?>{downsource}//将HTML表格的每行每列转为数组,采集表格数据]*?>'si“,”“,$table);$table = preg_replace(”'
$table = preg_replace(”'<[/!]*?[^<>]*?>'si“,”“,$table);//去掉空白字符
$table = preg_replace(”'([rn])[s]+'“,”“,$table);$table = str_replace(” “,”“,$table);$table = str_replace(” “,”“,$table);
$table = explode('{tr}', $table);
array_pop($table);foreach($table as $key=>$tr){ $td = explode('{td}', $tr);array_pop($td);$td_array[] = $td;} return $td_array;}?>{downsource}//返回字符串中的所有单词 $distinct=true 去除重复{downsource}//打印出为本PHP项目做出贡献的人员的清单 //生成随机密码function randStr($len=6){//用来产生密码的字符串$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789';$password=”";while(strlen($password)<$len)
$password.=substr($chars,(mt_rand()%strlen($chars)),1);return $password;
}
第四篇:学习使用PHP数组
如果你有很大的一个数组,而所要完成的仅是找出一个存在的给定值,你可以使用in_array()以返回true 或 false。如下代码将输出“Not found in this array”——因为你将在$namesArray中寻找一个并不存在的“Alber ”。
$namesArray = array(“Joe”, “Jane”, “Bob”, “Mary”, “Paul”, “Eddie”, “John”)$lookingFor = “Albert” if(in_array($lookingFor, $namesArray)){ echo “You've found it!” } else { echo “Not found in this array!” ?> 如果你改变了$lookingFor的值,将其变为“Mary”,你将得到消息“You've found it!”——因为“Mary”是$namesArray的一部分。如果希望对数组元素计数,你可以使用count()函数:
$namesArray = array(“Joe”, “Jane”, “Bob”, “Mary”, “Paul”, “Eddie”, “John”)$count = count($namesArray);?> $count值将为7。
你可以对任何数组添加元素,无论是在已存在数组的开始或末尾。你也可以使用函数以创建一个包含两个或多个数组元素的新数组。合并时每个数组将按需要的顺序排列。如果你的数组已经有内部的排序,你需要对新的合并数组重排序。让我们从对已存在数组的末尾增添元素开始,使用函数array_push(): /* 创建原始数组 */ $fruitArray = array(“apple”, “orange”, “banana”, “kiwi”, “pear”)/* 加入到原始数组中 */ array_push($fruitArray, “grape”, “pineapple”, “tomato”)/* 通过其键值列出每个元素*/ while(list($key,$value)= each($fruitArray)){ echo “$key : $value
” ?> 这将显示: 0 : apple 1 : orange 2 : banana 3 : kiwi 4 : pear 5 : grape 6 : pineapple 7 : tomato 当你需要对数组开头添加元素时,代码非常类似。不同处只是函数名:array_unshift()而不是array_push()。 /* 创建原始数组 */ $fruitArray = array(“apple”, “orange”, “banana”, “kiwi”, “pear”)/* 加入到原始数组中 */ array_unshift($fruitArray, “grape”, “pineapple”, “tomato”)/* 通过其键值列出每个元素*/ while(list($key,$value)= each($fruitArray)){ echo “$key : $value
” ?> 这将显示: 0 : grape 1 : pineapple 2 : tomato 3 : apple 4 : orange 5 : banana 6 : kiwi 7 : pear 函数array_merge()合并两个或更多的数组。 /* 创建原始数组 */ $fruitArray = array(“apple”, “orange”, “banana”, “kiwi”, “pear”) /* 创建第二个数组 */ $vegArray = array(“carrot”, “green beans”, “asparagus”, “artichoke”, “corn”)/* 合并为一个数组 */ $goodfoodArray = array_merge($fruitArray, $vegArray)/* 通过其键值列出每个元素*/ while(list($key,$value)= each($goodfoodArray)){ echo “$key : $value
” ?> 这将显示: 0 : apple 1 : orange 2 : banana 3 : kiwi 4 : pear 5 : carrot 6 : green bea 7 : asparagu 8 : artichoke 9 : cor 现在已经对数组进行了增加元素和合并,现在来练习删除元素函数。你可以使用函数array_pop()从一数组末尾删除一个元素。如果使用函数 array_shift(),则从一数组开头删除一个元素。而实际上当你从数组删除元素时,此元素对你而言仍然可用——当你从已存在的数组中对元素进行 pop 或 shift时。使用array_pop()函数从数组末尾删除一个值: /* 创建一数组*/ $fruitArray = array(“apple”, “orange”, “banana”, “kiwi”, “pear”)/* 在末尾弹出某值 */ $popped = array_pop($fruitArray)/* 列出新数组内容,以及弹出的值*/ while(list($key,$value)= each($fruitArray)){ echo “$key : $value
” echo “
and finally, in $popped: $popped” ?> 这将显示: 0 : apple 1 : orange 2 : banana 3 : kiwi and finally, in $popped: pear Next, delete an element from the end of an array: ??????????? 下面,从数组末尾删除某值: /* 创建一数组*/ $fruitArray = array(“apple”, “orange”, “banana”, “kiwi”, “pear”)/* 从数组头部移出某值 */ $shifted = array_shift($fruitArray)/* 列出新数组的内容以及移出的值*/ while(list($key,$value)= each($fruitArray)){ echo “$key : $value
” echo “
and finally, in $shifted: $shifted” ?> 这将显示: 0 : orange 1 : banana 2 : kiwi 3 : pear and finally, in $shifted: apple 有很多函数可以帮助你对数组元素排序。但我将会演示基本的排序以帮助你了解其过程:
/* 创建原始数组 */ $fruitArray = array(“apple”, “orange”, “banana”, “kiwi”, “pear”)/* 排序 */ ort($fruitArray)/* 对其重设以正确从头到尾显示数组 */ /* 通过其键值列出每个元素*/ while(list($key,$value)= each($fruitArray)){ echo “$key : $value
” ?> 这将显示: 0 : apple 1 : banana 2 : kiwi 3 : orange 4 : pear
第五篇:EXCEL IF函数怎么使用
EXCEL IF函数怎么使用(使用举例子)if函数可以嵌套七层,我简单举统计成绩中用到的一种写法:
if(a1>=90,“优秀”,if(a1>=60,“及格”,“不及格”)
其中a1要看你要分析的单元格的地址,这里只是举例罢了,实际应用还要看你的需要,分析完以后可以用填充柄填充下面的单元格,公式会自动在大于或等于90分的旁边写上优秀两字,在大于等于60分小于90分旁边的单无格写上及格,低于60分的写上不及格.如果你是用插入函数的话,选择if会出现三个格.第一格填入:a1>=90 第二格填入:优秀
第三格填入:if(a1>=60,“及格”,“不及格”)
希望这个对你的考试有所帮助.1.IF函数的语法结构
IF函数的语法结构:IF(条件,结果1,结果2),详细说明可以参照表6-4。
2.IF函数的功能
对满足条件的数据进行处理,条件满足则输出结果1,不满足则输出结果2。可以省略结果1或结果2,但不能同时省略。
3.条件表达式
把两个表达式用关系运算符(主要有=,<>,>,<,>=,<=等6个关系运算符)连接起来就构成条件表达式,例如,在IF(a1+b1+50 <> b1+c1 50, 1,1)函数式中,条件表达式是a1+b1+50 <> b1+c1 50。
4.执行过程
下面以IF(a1+b1+50 <> b1+c1 50, 1,1)函数式为例来说明IF函数的执行过程。
先计算条件表达式a1+b1+50 <> b1+c1 50,如果表达式成立,值为TRUE,并在函数所在单元格中显示“ 1”;如果表达式不成立,值为FALSE,并在函数所在单元格中显示“1”。
5.IF函数嵌套的执行过程
如果按等级来判断某个变量,IF函数的格式如下:
IF(E2>=85,“优”,IF(E2>=75,“良”,IF(E2>=60,“及格”,“不及格”)))
函数从左向右执行。首先计算E2>=85,如果该表达式成立,则显示“优”,如果不成立就继续计算E2>=75,如果该表达式成立,则显示“良”,否则继续计算E2>=60,如果该表达式成立,则显示“及格”,否则显示“不及格”。.6.IF 函数多个条件。
如果有多个条件,只要满足其中一个条件满足,就返回第一个值,否则返回第二个值。其公式为:IF(OR(条件1,条件2,条件3,条件4),”返回的第一个值”, “返回的第二个值”)如:IF(OR(W9>=70,X9>=108,(X9+2*Y9+2*Z9)>=165),“LTL”,“UPS”)