PHP学习总结(正则表达式、日期与时间)

正则表达式

一、理解正则表达式

描述了一类字符串的特征,然后通过这个特征可以配合一些特定的函数,来完成对字符串更加复杂的一系列操作! 普通字符和特殊字符组成的一个字符串

preg_match_all 函数用于执行一个全局正则表达式匹配

$pattern='/test/';
$str='abctestdwqdwqtestdwqdwqtestdwqdwqdqwtesttest';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

输出结果:

int(5) 
array(1) { [0]=> array(5) { [0]=> string(4) "test" [1]=> string(4) "test" [2]=> string(4) "test" [3]=> string(4) "test" [4]=> string(4) "test" } } 

二、定界符

使用正斜线"/"作为定界的字符,前后一致

三、普通字符

a-z,A-Z,0-9,双引号,单引号没有特殊意义


/*
元字符:\d
代表0,1,2,3,4,5,6,7,8,9之中的任意一个数字
*/
$pattern='/t\dst/';
$str='abct1sts';
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);
?>

输出结果:

int(1) 
array(1) { [0]=> array(1) { [0]=> string(4) "t1st" } } 

四、元字符

在正则表达式中有特殊含义的字符

\d	匹配任意一个十进制数字,等价于[0-9]
	\D	匹配任意一个除十进制数字以外字符,等价于[^0-9]
	\s	匹配任意一个空白字符,比如换页符、换行符、回车符、制表符、垂直制表符
	\S	匹配除空白字符以外的任何一个字符
	\w	匹配任意一个数字或字母或下划线
	\W	匹配除数字、字母、下划线以外的任意一个字符
	.	匹配除换行符以外的任意一个字符
	
	*	匹配0次、或1次、或多次其前面的字符
	+	匹配1次或多次其前面的字符
	?	匹配0次或1次其前面的字符
	{n}	表示其前面字符恰好出现n次
	{n,}	表示其前面字符出现不少于n次
	{n,m}	表示其前面的字符至少出现n次,最多出现m次
	
	^或\A	匹配字符串开始位置
	$或者\Z	匹配字符串的结束位置
	
	|	匹配两个或多个模式
	
	[]	匹配方括号中的任意一个字符
	[^]	匹配除方括号中字符以外的任意一个字符

/*
 元字符:\D
除了0,1,2,3,4,5,6,7,8,9之外的任意一个字符
*/
$pattern='/t\Dst/';
$str='abct@sts';
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);
?>

输出结果:

int(1) 
array(1) { [0]=> array(1) { [0]=> string(4) "t@st" } } 

/*
\w:匹配任意一个 字母或者数字或者下划线
*/
$pattern='/t\wst/';
$str="abct3sts";
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);
?>

输出结果:

array(1) { [0]=> array(1) { [0]=> string(4) "t3st" } } 

四、元字符


/*
元字符:+
	匹配1次或多次其前面的字符
	放在+前面的那个字符可以出现1次,也可以出现多次
*/
$pattern='/te+st/';
$str='abctst';//+代表前面的字符出现1次或者多次,不能不出现。
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

输出结果:

int(1) 
array(1) { [0]=> array(1) { [0]=> string(4) "test" } }

/*
元字符:?
	匹配0次或1次其前面的字符
	放在?前面的那个字符可以出现0次,或者1次
*/
$pattern='/te?st/';
$str='abcteest';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

输出结果:

int(0) 
array(1) { [0]=> array(0) { } } 

/*
.与{n}配合
*/
$pattern='/t.{3}st/';//  t...st
$str='abctabcst';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

输出结果:

int(1) 
array(1) { [0]=> array(1) { [0]=> string(6) "tabcst" } } 

/*
 .与*配合
*/

 $pattern='/t.*st/';//tst
$str='abctst';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

输出结果:

int(1) 
array(1) { [0]=> array(1) { [0]=> string(3) "tst" } }
 
/*
$或\A	匹配字符串的结束位置
*/
$pattern='/test$/';
$str='dwqdtestwqdwqdwqtest';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?> 

输出结果:

int(1) 
array(1) { [0]=> array(1) { [0]=> string(4) "test" } } 
 
/*
|
*/
$pattern='/test|abc|AAA/';
$str='efAAAewtestfweabcfwefAAAwe';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

输出结果:

int(4) 
array(1) { [0]=> array(4) { [0]=> string(3) "AAA" [1]=> string(4) "test" [2]=> string(3) "abc" [3]=> string(3) "AAA" } }

五、模式修正符
常见模式修正符
i 在和模式进行匹配时不区分大小写
m 多行匹配,如果目标字符串 中没有"\n"字符, 或者模式中没有出现^或KaTeX parse error: Expected 'EOF', got '\n' at position 78: … 1)目标字符串中必须包含"\̲n̲" 在字符串中出现"\n"…
\r:回车符
\n:换行符

 
/*
模式修正符 : i
	在和模式进行匹配时不区分大小写
*/
$pattern='/test/i';
$str='       test   TEST  Test  TeSt        ';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

输出结果:

int(4) 
array(1) { [0]=> array(4) { [0]=> string(4) "test" [1]=> string(4) "TEST" [2]=> string(4) "Test" [3]=> string(4) "TeSt" } } 

/*
模式修正符 : m
	多行匹配
*/
$pattern='/test\r*$/m';
//$str="test\ntest\ntest\ntest";
$str="test
test
test
test";//$str="test\r\ntest\r\ntest\r\ntest";
//在windows操作系统中你所看到的换行(现象 )其实是通过两个字符来完成的(\r\n)
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

输出结果:

int(4)
array(1) {
 [0]=>
 array(4) {
   [0]=>
   string(4) "test"
   [1]=>
   string(4) "test"
   [2]=>
   string(4) "test"
   [3]=>
   string(4) "test"
 }
}
 
/*
 模式修正符 : s
如果设定了此修正符,那么.将匹配所有的字符包括换行符(\n)
*/

$pattern='/t.st/s';
$str="t\nst";
/*
$str="t
st";//其实在windows里面就等价于$str="t\r\nst"
*/
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

输出结果:

int(1)
array(1) {
 [0]=>
 array(1) {
   [0]=>
   string(4) "t
st"
 }
}

六、与正则表达式配合的函数


/*
preg_match()
执行一个正则表达式匹配
参数说明:
	第一个参数:正则表达式
	第二个参数:目标字符串
	第三个参数(可选):放一个变量,执行完成之后,里面会有匹配到的部分以及等等一些数据!
	第四个参数(可选):可以传PREG_OFFSET_CAPTURE进入(那么第三个参数那个变量里面的数据就会有匹配到的部分的偏移值),默认传的是0
	第五个参数(可选):可以传一个值,来表示从目标字符串的哪个位置开始搜索(单位是字节)。
*/
$pattern='/t(.*?)st/';
$str='adwdwqdqwdqwtest      tdqwst     test  tvrgrgrst';
var_dump(preg_match($pattern, $str,$arr));
var_dump($arr);
if(preg_match($pattern, $str,$arr,PREG_OFFSET_CAPTURE)){
	echo '找到啦!
'
; var_dump($arr); }else{ echo '没找到!'; } ?>

输出结果:

int(1)
array(2) {
 [0]=>
 string(4) "test"
 [1]=>
 string(1) "e"
}
找到啦!
array(2) { [0]=> array(2) { [0]=> string(4) "test" [1]=> int(12) } [1]=> array(2) { [0]=> string(1) "e" [1]=> int(13) } }

第四个参数(可选):
PREG_PATTERN_ORDER
PREG_SET_ORDER
PREG_OFFSET_CAPTURE
第五个参数(可选):可以传一个值,来表示从目标字符串的哪个位置开始搜索(单位是字节)。
preg_replace第一个参数与第二个参数传数组,一一对应的去替换!

日期与时间
一、设置时区
date_default_timezone_set('Asia/Shanghai');//设置时区
二、获取当前Unix时间戳
time()
三、获取指定时间的Unix时间戳
mktime()
date_default_timezone_set('Asia/Shanghai');//设置时区

$nowTime=time();
	$time1=mktime(0,0,0,10,1,2014);//取得一个日期的 Unix 时间戳
echo '距离2014年国庆还有'.(($time1-$nowTime)/60/60/24).'天';

四、从Unix时间戳取得时间日期信息
date()格式化一个本地时间/日期
第一个参数:必填,写上你所需要的时间日期的格式,把format 字符放在第一个参数里面会被转换成对应的信息,其他的字符还是原来的样子
date(‘Y-m-d G:i:s’)
自定义格式化Unix时间戳 为指定的时间格式!
五、获取Unix时间戳和微秒数
microtime() 返回当前 Unix 时间戳和微秒数
var_dump(microtime());
var_dump(microtime(true));


date_default_timezone_set('Asia/Shanghai');//设置时区
$startTime=microtime(true);
for ($i=0;$i<10000000;$i++){
	
}
$endTime=microtime(true);
echo '该for循环花费了'.round(($endTime-$startTime),4).'秒';
?>

输出结果:

该for循环花费了0.104秒

你可能感兴趣的:(PHP学习)