PHP课程笔记12

课时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

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值