课时200 选择PHP正则表达式的处理函数库
/*
* 1.正则表达式:就是一个匹配的"模式"
* 2.正则表达式本身在PHP中就是一个字符串(中有一些语法规则,特殊字符)
* 3.
*
* 正则表达式这个字符串,一定要在对应的函数中使用.(分割的函数中, 替换函数中, )
课时201 正则表达式语法介绍1
* 定界符 多种都可以,但常用//
*
* 原子 : 最小的一个匹配单位(放在定界符中),在一个正则表达式中,至少得有一个原子
* 元字符 : 元字符不能单独使用,修饰原子,是用来扩展原子功能和限定功能的
*
* 模式修正符号: 修正,对模式(正则)修正(写在定界符号外,在右边)
*
*/
$reg = "/a(5)/i";
课时202 正则表达式语法介绍2
$reg = "/\d/";
$str = "aaaaaaa234aae291293aedrwivanf4359u1nlsd834";
echo $str."<br>";
echo preg_replace($reg,"#",$str)."<br>";
print_r(preg_split($reg,$str));
echo "<br>";
if(preg_match($reg,$str,$arr)){
echo "正则表达式<b>{$reg}</b>和字符串<b>{$str}</b>匹配成功!";
}else{
echo "未匹配";
}
结果:
aaaaaaa234aae291293aedrwivanf4359u1nlsd834
aaaaaaa###aae######aedrwivanf####u#nlsd###
Array ( [0] => aaaaaaa [1] => [2] => [3] => aae [4] => [5] => [6] => [7] => [8] => [9] => aedrwivanf [10] => [11] => [12] => [13] => u [14] => nlsd [15] => [16] => [17] => )
课时203 正则表达式中的原子1
/*
* 原子:
* 1.打印字符(a-z,0-9 !@#$%^&*)和非打印字符
*
* \ 转义字符
* 一.可以将有意义的字符转换成没有意义的字符
* 二.可以将没有意义的字符转成有意义的原子
* 三.a-z A-Z 0-9 所有没有意义的字符加上转义也没有意义的不要加\. \@ 都是可加可不加
*
*
*
*/
$str = "this is a word<br>";
$reg = "/a/";
if(preg_match($reg,$str,$arr)){
echo "正则表达式<b>{$reg}</b>和字符串<b>{$str}</b>匹配成功!<br>";
print_r($arr);
}else{
echo "未匹配";
}
结果:
正则表达式/a/和字符串this is a word
匹配成功!
Array ( [0] => a )
课时204 正则表达式中的原子2
* 原子:
* 1.打印字符(a-z,0-9 !@#$%^&*)和非打印字符
* 2.所有的数字,所有的字,所有的空白,特殊符号
* /d 代表任意一个数字 [0-9]
* /D 代表任意一个非数字 [^0-9]
*
* /s 代表空白
* /S 代表任意一个非空白
*
* /w 代表任意一个字 a-z A-Z 0-9 _ [a-zA-Z_]
* /W 代表任意一个非字 [^a-zA-Z_]
* 3.自定义原子表
* [a-z]
* [324]
* [^A-Z]
* 4.点(.)能代表所有的字符
课时205 正则表达式中的元字符1
* 元字符:不能在正则表达式中单独使用,用来修饰原子
* * 用来修饰其前面的原子可以出现0个1个或多个. {0,}
* + 用来修饰其前面的原子,可以出现1次或多次,不能没有 {1,}
* ? 用来修饰其前面的原子,可以出现0次或1次 {0,1}
* {m} m = 3 用来修饰其前面原子只能出现m次,多一次和少一次都不可以
* {n,m} {2,5} 用来修饰其前面的原子出现个数在2到5之间,包含2和5
* {n,} {2,} 用来修饰其前面原子至少出现N次,包括N
课时206 正则表达式中的元字符2
* | 是或关系,表示它两边的原子只要有一个出现就可以,但是 | 的优先级是最低的.
* ^ 和 \A 表示必须以什么开始.这个必须写在正则表达式的最前面
* $ 或 \Z 表示必须以什么结束.这个必须卸载正则表达式的最后面
*
* /b 单词边界
* /B 不是单词边界
*/
$str = "abcgoooooogle abc mysqlabc";
$reg = "/^abc.*abc$/";
if(preg_match($reg,$str,$arr)){
echo "正则表达式<b>{$reg}</b>和字符串<b>{$str}</b>匹配成功!<br>";
print_r($arr);
}else{
echo "未匹配";
}
结果:
正则表达式/^abc.*abc$/和字符串abcgoooooogle abc mysqlabc匹配成功!
Array ( [0] => abcgoooooogle abc mysqlabc )
课时207 正则表达式中元字符中的小括号
* ()
* 第一个作用,改变优先级别
* 第二个作用,将小原子变成大原子
* 第三个作用,子模式. 整个表达式是一个大的模式, 小括号里的是每个独立的子模式
* 第四个作用,反向引用.
课时208 模式修正符(单个字符)1
/* 模式修正符号(单个字符)
* 1.模式修正符号写在定界符号外,放在右边
* 2.模式修正符号: 一个字符就是一个功能,可以组合使用
*
* 作用:
* 1.模式修正符号可以修正正则表达式的解释.或扩充了正则表达式的功能
*
* i : 修正正则表达式不区分大小写(默认是区分大小写的)
* m : 修正正则表达式可以视为多行,在使用^或$这两个符号时,每一行满足都可以(默认字符串都视为一行)
*
*/
课时209 模式修正符(单个字符)2
* s : 修正正则表达式中的点(.)可以匹配换行符号(默认点(.)不能匹配回车符号)
* x : 可以忽略正则表达式中的空格
* U : (.*或.+)正则表达式比较贪婪, .*? 和 .+? 可以取消贪婪模式. U也是这个功能.
课时210 如何自己编写正则表达式(url)
/*
* 正则表达式的编写
* 1.本身就一种语言,开发思想放进去
* 2.列需求
*
*/
$str = "
https://www.zhangzuoxuan.com/php/demo.inc.php?username=admin,
http://bbs.baidu.com,
ftp://www.zhangzuxouan.net.
";
$reg = "/(https?|ftps?)\:\/\/(www|mail|bbs|ftp)\.(.*?)\.(com|net|org|cn)([\w-\.\/\=\?\&\%]*)?/";
if(preg_match_all($reg,$str,$arr)){
echo "正则表达式<b>{$reg}</b>和字符串<b>{$str}</b>匹配成功!<br>";
echo "<pre>";
print_r($arr);
echo "</pre>";
}else{
echo "未匹配";
}
结果:
正则表达式/(https?|ftps?)\:\/\/(www|mail|bbs|ftp)\.(.*?)\.(com|net|org|cn)([\w-\.\/\=\?]*)?/和字符串 https://www.zhangzuoxuan.com/php/demo.inc.php?username=admin, http://bbs.baidu.com, ftp://www.zhangzuxouan.net. 匹配成功!
Array ( [0] => Array ( [0] => https://www.zhangzuoxuan.com/php/demo.inc.php?username=admin [1] => http://bbs.baidu.com [2] => ftp://www.zhangzuxouan.net. ) [1] => Array ( [0] => https [1] => http [2] => ftp ) [2] => Array ( [0] => www [1] => bbs [2] => www ) [3] => Array ( [0] => zhangzuoxuan [1] => baidu [2] => zhangzuxouan ) [4] => Array ( [0] => com [1] => com [2] => net ) [5] => Array ( [0] => /php/demo.inc.php?username=admin [1] => [2] => . ) )
课时211 编写email正则表达式
$str = "
ffffftuan@163.net,
lala-laewde+m2axiy.a@wo.com,
ff-ese3@ei.org,
";
$reg = "/\w+([+-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/i";
if(preg_match_all($reg,$str,$arr)){
echo "正则表达式<b>{$reg}</b>和字符串<b>{$str}</b>匹配成功!<br>";
echo "<pre>";
print_r($arr);
echo "</pre>";
}else{
echo "未匹配";
}
结果:
正则表达式/\w+([+-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/i和字符串 ffffftuan@163.net, lala-laewde+m2axiy.a@wo.com, ff-ese3@ei.org, 匹配成功!
Array ( [0] => Array ( [0] => ffffftuan@163.net [1] => lala-laewde+m2axiy.a@wo.com [2] => ff-ese3@ei.org ) [1] => Array ( [0] => [1] => .a [2] => -ese3 ) [2] => Array ( [0] => [1] => [2] => ) [3] => Array ( [0] => [1] => [2] => ) )
课时212 字符串的匹配与查找之(strstr、strpos、substr)
<?php
/*
* 分割,匹配,查找,替换
*
* 1.字符串处理函数(一般功能都可以,效率高)
*
* 2.正则表达式函数(功能强大,但效率比字符串函数低)
*
*
* 注意:
* 如果可以直接使用字符串函数处理的字符串,就不要使用正则处理
*
*
* 匹配查找:
* 字符串: strstr strpos substr
* 正则 : preg_match() preg_match_all() preg_grep()
*
*/
$str = "this is a test!";
echo strstr($str,"test",true)."<br>";
if(strstr($str,"test")){
echo "存在<br>";
}else{
echo "不存在<br>";
}
echo strpos($str,"test")."<br>"; //查找到的是位置,是第一个字符的位置,从0开始数
function GetFile($url){
$loc = strrpos($url,"/")+1;
return substr($url,$loc);
}
echo GetFile("http://www.baidu.com/aaa/demo.php"),"<br>";
echo GetFile("../../imges/loge.gif")."<br>";
结果:
this is a
存在
10
demo.php
loge.gif
课时213 字符串的匹配与查找之(preg_match)
$reg = "/\d/";
if(preg_match($reg,$str)){
echo "匹配成功";
}else{
echo "匹配失败";
}
结果:
匹配成功
课时214 字符串的匹配与查找之(preg_match_all与preg_grep)
$arrr = array("ab cd","hello","world","23j ei","sdf23");
$ar2 = preg_grep("/\s/",$arrr);
print_r($ar2);
结果:
Array ( [0] => ab cd [3] => 23j ei )
课时215 字符串的分割与连接(explode、implode join、preg_split)
<?php
/*
* 分割
* 字符串: explode() implode()
* 正则表达式: preg_split()
*
*/
$str = "this is a test.
hello world,
ni hao.
";
print_r(explode(" ",$str,7)); //第三个参数指定分割次数,最后没分割完的都放在最后一个数组里
echo "<br>";
print_r(preg_split("/[.,? ]/",$str,7)); //第三个参数也是指定分割次数,跟explode的一样
?>
结果:
Array ( [0] => this [1] => is [2] => a [3] => test. [4] => hello [5] => world, [6] => ni hao. )
Array ( [0] => this [1] => is [2] => a [3] => test [4] => [5] => hello [6] => world, ni hao. )
课时216 字符串的替换(str_replace)
* 替换
*
* 字符串: str_replace()
* 正则表达式: preg_replace()
$str2 = "www.baidu.com/sss/aaa/deaaamo.php";
$newstr = str_replace("aaa","php",$str2,$num);
echo $str2."<br>";
echo $newstr."<br>";
echo "替换次数{$num}<br>";
//str_replace可以用数组来替换多个位置的内容,如果替换内容也用数组,那需要一一对应
$str3 = "这是一句正常的已被修改句子,但里面有替换一些不能显示的文字.";
$newstr2 = str_replace(array("已被修改","替换"),array("**","##"),$str3,$num2);
echo $str3."<br>";
echo $newstr2."<br>";
echo "替换次数{$num2}<br>";
结果:
www.baidu.com/sss/aaa/deaaamo.php
www.baidu.com/sss/php/dephpmo.php
替换次数2
这是一句正常的已被修改句子,但里面有替换一些不能显示的文字.
这是一句正常的**句子,但里面有##一些不能显示的文字.
替换次数2
课时217 字符串的替换(preg_replace)1
//用正则表达式来替换
$st = "尝试使用<b>正则表达式</b>来<font color='red'>替换</font>http://www.baidu.com";
$html = "/\<[\/\!]*?[^\<\>]*?\>/is";
$url = "/(https?|ftps?)\:\/\/(www|mail|bbs|ftp)\.(.*?)\.(com|net|org|cn)([\w-\.\/\=\?\&\%]*)?/";
$newst = preg_replace($html,"",$st,1); //第四个参数表示要替换几次,如果字符串中有多处可以替换的话
$newurl = preg_replace($url,'<a href="\1://\2.\3.\4">\1://\2.\3.\4</a>',$st);
echo $st."<br>";
echo $newst."<br>";
echo $newurl."<br>";
结果:
尝试使用正则表达式来替换http://www.baidu.com
尝试使用正则表达式来替换http://www.baidu.com
尝试使用正则表达式来替换http://www.baidu.com
课时218 字符串的替换(preg_replace)2