天天看点

PHP第九课 正则表达式在PHP中的使用

今天内容

1.正则表达式

2.数学函数

3.日期函数

4.错误处理

正则表达式:

1.模式修正符

2.五个常用函数

另外一个正则表达式的网站:http://www.jb51.net/tools/zhengze.html

正则表达式

1.原子

2.元子符

3.模式修正符

正则表达式函数

1.preg_match();

2.preg_match_all();

3.preg_grep();

4.preg_replace();

5.preg_split();

原子:

.:代表任意一个字符

\w: 字母 数字 下划线

元子符:

*:修饰前面的,0,1,多个.代表任意多个字符,直到结束

+:一个.多个

?:0个一个前面的原子

|:代表或

^:一开什么开头

$:以什么结尾

\b:词边缘

\B:非词边缘

单个字母 数字

a-z A-Z 0-9 代表任意一个字符

[]代表里面的任意一个字符

[^abc]他里面除了abc的任意一个字符

()代表一个单元

\d 任意一个数字

\D 任意一个非数字

\w:代表任意一个字母数字下划线

\W:出了字母.数字.下划线意外任意一个字符

\s:空白字符

\S:除了空白字符以外的任意一个字符

{2}:2个原子

{2,}:2个以上的原子

{2,5}: 2-5个前面的原子

模式修正符:

/正则表达式/U

匹配与以上特殊字符同名的普通字符,需要在前面加入/

<?php
		$sub = "www.baidu.com";








		$ptn = '/\w*\.\w*\.\w*/';




		//         正则表达式,元数据,返回的数据
		preg_match($ptn, $sub,$mats);




		echo "<pre>";
		print_r($mats);
		echo "</pre>";
		
		?>	
           

//匹配ip

<?php 
			 $str = "my ip is 192.168.10.1sdjlfajdf192.178.39.4la";




			 $ptn = '/\d+\.\d+\.\d+\.\d+/';
			 
			 preg_match_all($ptn, $str,$mats);




			 echo "<pre>";
			 print_r($mats);
			 echo "</pre>";




			 ?>
           

模式修正符,放在正则表达式的最后面

i,m,s,u,e

i :忽略大小写

m :视为多行

s :视为一行

u :贪婪模式,最大模式

e :替换的时候用的,可以用函数加工,用于匹配正则表达式中的第一个圆括号

<?php 
 $str = "Linux and php are lamp or linux is very  much";


 $ptn = '/linux/i';


 preg_match_all($ptn, $str,$mats);


 echo "<pre>";
 print_r($mats);
 echo "</pre>";


 ?>
           

 m例子

 m视为多行

<?php 
 $str = "Linux and php are lamp or \nlinux is very  much";


 $ptn = '/^linux/im';


 preg_match_all($ptn, $str,$mats);


 echo "<pre>";
 print_r($mats);
 echo "</pre>";


 ?>
           

模式修正符

<?php 
 $str = "Linux and php are lamp or \nlinux is very  much";


 $ptn = '/.*/s';


 preg_match_all($ptn, $str,$mats);


 echo "<pre>";
 print_r($mats);
 echo "</pre>";


 ?>
           

 e的使用

<?php 
 $str = "123 php";


 $ptn = '/\d+\s(\w+)/e';


 $rep = 'strtoupper($1)';


 // preg_match_all($ptn, $str,$mats);


 $str2 = preg_replace($ptn, $rep, $str);


 echo "<pre>";
 print_r($str2);
 echo "</pre>";


 ?>
           

向后引用

<?php 
 $str = "123 php";


 $ptn = '/(\d+)(\s)(\w+)/';


 $rep = '$3$2$1';


 // preg_match_all($ptn, $str,$mats);


 $str2 = preg_replace($ptn, $rep, $str);


 echo "<pre>";
 print_r($str2);
 echo "</pre>";


 ?>
           

五个常用函数

1.字符串的匹配与替换

preg_match();

preg_match_all();

preg_grep();做搜索

2.字符串的替换

preg_replace();

3.字符串的分割

preg_split();

eval让字符串表达式能够执行

preg_grep实例,做搜索:

<?php 
 //比如代表文章
    $arr = array(
      "php html",
      " linux redhat rhce",
      "junzaivip test php",
    	);
	 //需要搜索的内容
    $ptn = '/junzaivip/';


    //返回搜索到的内容
    $arr2 = preg_grep($ptn, $arr);


    echo "<pre>";
    print_r($arr2);
    echo "</pre>";


 ?>
           

 4.数学函数

  1.max();

  2.min();

  注意:1.多个数字,2,多个数字组成的数组

<?php 
	 echo max(3,45,6,7);
	 echo "<br>";
	 echo max(array(4,6,8,9));


	 ?>
           

5.日期函数

1.time();

2.date(); //把时间戳转换为日期

3.strtotime();//把日期转换为时间戳

4.microtime();

//calc打开计算器

时间的起源点:

<?php 
 echo time();
 echo "<hr>";
 echo date("Y-m-d H:i-s w t",0);
 ?>
           

 时间转换为时间戳

<?php 
echo strtotime("2014-12-12");
 ?>
           

 计算当前时间的具体日期:

<?php 
 echo date("Y-m-d H:i:s",time()+8*3600);


 ?>
           

 通过修改时区来查找当前日期:

<?php 
 //设置中国的时区为默认时区
 date_default_timezone_set("PRC");
 echo date("Y-m-d H:i:s",time());


 ?>
           

 注意:如果每个改比较麻烦的话,就直接去修改php的配置文件php.ini文件,直接修改里面的date 找见timezone修改为PRC

 date参数:

 Y 2014  年全

 y 14    年只有后两位

 m 03    月份有前导0

 n 3     月份没有前导0

 d 05 日期有前导0

 j 5     日期没有前导0

 H       24小时

 h       12小时

 i       05分钟 

 s       05秒

 w 0-6   周日到周六

 t 31    一月多少天

 L       是否为闰年

 //怎样区分平润年

 能够被4整除,同时如果能被100整除的话,那就必须被400整除,此时它就是闰年

<?php 
 //设置中国的时区为默认时区
	 date_default_timezone_set("PRC");
	 $y = "1900/1/1";
	 $time = strtotime($y);




	 echo date("L",$time);


 ?>
           

 microtime() 微秒

 计算脚本的运行时间:

<?php 
 	$stime =  microtime(1);//注意这个位置必须用true,否者无法参与计算


 	sleep(1);


 	$etime =  microtime(1);


 	echo $etime - $stime;


 ?>
           

 实例:万年历

 万年历技术点

 1.几年几月几日

 2.周日到周六

 3.1号是星期几

 4.这个月有多少天

 5.下一年和上一年

 6.下一月和上一月

 万年历代码:

<?php 
 //修改字符编码


 //header("content-type:text/html;charset=utf-8");


 date_default_timezone_set("PRC");
 	//获取当前年
 $year = $_GET['y']?$_GET['y']:date('Y');


 	//获取当前月
 $month = $_GET['m']?$_GET['m']:date('m');


 	//获取获取当前月有多少天
 $days =  date('t',strtotime("{$year}-{$month}-1"));//里面必须用双引号


 //当前一号是周几


 $weeks = date('w',strtotime("{$year}-{$month}-1"));


 //所有有内容居中
 echo "<center>";
 //输出表头
 echo "<h2>{$year}年{$month}月</h2>";


 //输出日期表格
 echo "<table width='700px' >";


 //输出第一行
 echo "<tr>";
 //表头单元格由th来创建
 echo "<th>日</th>";
 echo "<th>一</th>";
 echo "<th>二</th>";
 echo "<th>三</th>";
 echo "<th>四</th>";
 echo "<th>五</th>";
 echo "<th>六</th>";


 echo "</tr>";


 //开始铺表格
 for($i = 1 - $weeks;$i <= $days;){
 	echo "<tr>";
 		for ($j=0; $j < 7; $j++) { 
 				if ($i > $days || $i < 1) {
 					echo "<td> </td>";
 				} else{


 					echo "<td>{$i}</td>";
 				}


 			
 			$i++;
 		}


 	echo "</tr>";


 }




 echo "</table>";
 //实现一下上一年和上一月
 if($month == 1){
 	$prevyear = $year - 1;
 	$prevmonth = 12;


 } else{
 	$prevyear = $year;
 	$prevmonth = $month -1;
 }


 if($month == 12){
 	$nextyear = $year + 1;
 	$nextmonth = 1;


 }	else{
 	$nextyear = $year;
 	$nextmonth = $month + 1;
 }




 //输出上一月和下一月的按钮
 echo "<h2><a href = 'index.php?y={$prevyear}&m={$prevmonth}'>上一月</a>|<a href='index.php?y={$nextyear}&m={$nextmonth}'>下一月</a></h2>";


 echo "</center>";


 ?>
           

PHP的错误处理

1.关闭和开启报错

2.错误报告级别

3.错误报告地方

关闭和开启报错

E_ALL

E_ERROR //严重错误

E_WARNING  //警告错误

E_PARSE    //语法错误

E_NOTICE //提示错误

关闭错误

display_error = off

报什么级别的错:

error_reporting = E_ALL

error_reporting = E_ALL & ~E_NOTICE //报所有错误,但是除了提示错误

报错地方:

//是否从浏览器报错

display_error = off

//是否把错误输出到一个自定义日志文件中

log_errors = on

error_log = d:\phplogs\php.log

转载请注明出处: http://blog.csdn.net/junzaivip

继续阅读