php正则表达式模式匹配实例教程

发布时间:2020-10-02编辑:脚本学堂
php正则表达式的实例教程,包括php正则表达式函数、模式修正符的用法、php正则函数与字符串替换,以及一个php成年历的实例代码。

php正则表达式
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.jb200.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  
cho 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' border='1px'>"; 
//输出第一行 
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.错误报告地方

1)、关闭和开启报错
E_ALL
E_ERROR  //严重错误
E_WARNING  //警告错误
E_PARSE//语法错误
E_NOTICE  //提示错误

2)、关闭错误
display_error = off
报什么级别的错:
 

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

3)、报错地方:
 

//是否从浏览器报错
display_error = off
//是否把错误输出到一个自定义日志文件
log_errors = on
error_log = d:phplogsphp.log