侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

php 正则表达式学习笔记

php  /  管理员 发布于 7年前   357

复制代码 代码如下:

//匹配文本,这个偶尔比较好用,但是要小心字符中包含\E 
$str = '[a-z]'; 
$str = preg_replace('/\G[a-z]\E/', '', $str); 
echo $str; //打印空,全被替换掉了,相关大概就是preg_quote功能 
复制内容到剪贴板代码: 
//给匹配结果命名,这样在匹配结果中就可以用这个名称来获取值 
$str = 'abc123abc'; 
preg_match('/(?P<num>\d+)/', $str, $arr); 
echo $arr['num']; //相当于echo $arr[1] 


复制代码 代码如下:

//仅用于分组的括号,匹配内容不会被变量捕获,有时候需要这样提高执行效率 
$str = 'abc123abc'; 
preg_match('/abc(?:\d+)/', $str, $arr); 
echo $arr[1]; //除了$arr[0]外没有$arr[1]了,不会赋予\1 

复制代码 代码如下:

//插入的好帮手,向前、向后锚点搜索位置,每3位添加一个逗号 
$str = 'fdfad123456789fdfd'; 
$str = preg_replace('/(?<=\d)(?=(\d{3})+(?!\d))/', ',', $str); 
echo $str; //打印 fdfad123,456,789fdfd 

//以最少的结果匹配
$str = 123456;
preg_match('/\d+/', $str, $arr);
echo $arr[0]; //是人都知道是123456吧
preg_match('/\d+?/', $str, $arr);
echo $arr[0]; //这次是1
//一个比较有用的,可以判断前面的是否有匹配过,比如下边的例子,可以忽略等号右边是否有单引号双引号或者什么都没有
$str = <<<HTML
<font size=12></font>
<font size='13'></font>
<font size="14"></font>
<font size="15></font>
HTML;
preg_match_all('/<font\s+size=([\'"]?)(\d+)\1[^>]*>/', $str, $arr);
print_r($arr);
/*
Array
(
    [0] => 12
    [1] => 13
    [2] => 14
)
*/
//部分模式修饰符,模式修饰符也可以放在表达式中的
//这里匹配符合XHTML规范的style里的颜色值,大写的STYLE被忽略了,但是里面的color可以大小写无所谓
$str = '<b style="COLOR:red"></b><b STYLE="color:blue"></b><b style="color:green"></b>';
preg_match_all('/style=([\'"]?)(?i)color:(\w+)\1(?-i)/', $str, $arr);
print_r($arr[2])
//也可以把匹配内容放到里面,用:隔开,就不用写结束(?-i)
//preg_match_all('/style=([\'"]?)(?i:color:(\w+))\1/', $str, $arr);
//再看一例子
$str = '<B>Style</B>';
preg_match('/<B>(?i:style)<\/B>/', $str, $arr);
print_r($arr); //可以匹配到
$str = '<B>Style</b>';
preg_match('/<B>(?i:style)<\/B>/', $str, $arr);
print_r($arr); //什么都没匹配到
//单词检索,可惜只能用在英文
$str = 'I\'m a teacher';
preg_match_all('/\b[a-z]+\b/i', $str, $arr);
print_r($arr)
复制内容到剪贴板代码:
//u修饰符,按unicode匹配
$str = '你您';
$str = preg_replace('/[你您]/', 'you', $str);
echo $str; //被拆开了,打印4次you
//看下面加上u修饰符后的效果,该修饰符需要编码utf-8否则会报错
//我的文本都是gb2312,所以要转成utf-8
$str = iconv('gb2312', 'utf-8', '你您');
$regex = iconv('gb2312', 'utf-8', '/[你您]/u');
$str = preg_replace($regex, 'you', $str);
echo $str; //打印2次you
//x模式修饰符,可以忽略空白和加注释
$str = 'test Test';
preg_match('/test  #只匹配小写的test/x', $str, $arr);
print_r($arr);
复制内容到剪贴板代码:
//排除环视(?<!...) (?!...)、忽略优先 *? +? ?? 的复合使用
$str = 'test <B>test1<B> test2</B>';
preg_match('/<B>(?:.(?<!<B>))*<\/B>/i', $str, $arr);
//或者 preg_match('/<B>(?:(?!<B>).)*<\/B>/i', $str, $arr);
print_r($arr)
//当时这样写应付不了 $str = 'test <B>test1<B> test2</B> test3</B>';
//改写一下正则既可 preg_match_all('/<B>(?:(?!<\/?B>).)*<\/B>/i', $str, $arr);
//根据上面来完成一个最简单的UBB替换
$str = 'test [b]test1[b] test2[/b] test3[/b]test';
$str = preg_replace('/\[B\]((?:(?!\[\/?B\]).)*)\[\/B\]/i', '<b>\1</b>', $str);
$str = preg_replace('/\[B\]((?:(?!\[\/?B\]).)*)\[\/B\]/i', '<b>\1</b>', $str);
print_r($str)
//如果已经确认回朔并不会有匹配结果,可以使用固化分组来放弃备用状态提高效率
$str = 'Subject';
preg_match('/(\w+):/', $str, $arr);
//用以下方法代替
//在第一组匹配规则匹配到文本末尾t时匹配结束,启用第二组匹配规则:并不会找到结果,所以这个时候回朔查找,但是\w不会包含:,所以可以直接放弃,
preg_match('/(?>\w+):/', $str, $arr);


  • 上一条:
    php下常用表单验证的正则表达式
    下一条:
    PHP 正则 email语句详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客