搜索
首页
笔记
案例
关于
课程列表
PHP
php基础
基本语法
流程控制
函数
数组
对象
Trait
字符串处理
正则表达式
SPL
输出缓存
php与xml
生成器
php常用扩展
错误与异常处理
日期与时间
文件系统
图像处理
数据库开发
Mysqli扩展
Db类
高级功能
会话控制
CURL
PHP安全
PHP版本
从5.6到7.0
从7.0到7.1
课程导航
计算机基础知识
C
Linux
linux常用软件
计算机网络
程序员修养
设计模式
工具
Git
composer
vim
IntelliJ IDEA
wireshark
laravel
Spring
SpringMVC
Maven
数据库
MySQL
Redis
MongoDB
JDBC
Mybatis
MyBatis-Plus
服务端编程
PHP
Java
shell script
JavaWeb
HTML / CSS
HTML
CSS
HTML5
CSS3
BOOTSTRAP
JavaScript
JavaScript
JQuery
layui
字符串处理
SPL
正则表达式
## 正则简介 正则表达式也称为模式表达式,它自身具有一套非常完整的、可以编写模式的语法体系,提供了一种灵活且直观的字符串处埋方法。正则表达式通过构建具有特定规则的模式,与输入的字符中信息进行比较,在特定的函数中使用.从而实现字符串的匹配、杳找、替换及分割等操作。 ![图片](http://blog.1024phper.com/static/qiniu/blog19070319314078795) ## 正则表达式语法规则 正则作为匹配模板,由原子、元字符及修饰符三部分组成。最简单的正则至少包含一个原子。 ### 定界符 不仅仅限于斜线‘/’,除了字母、数字和反斜线以外任何字符都可以作为定界符号,如“#”、“!” ### 原子 1.普通字符作为原子,如a-z、A-Z、0-9 2.特殊字符和元字符作原子,需“\”转义,如'/\./'、'/
/' 3.一些非打印字符作原子,如\n、\t 4.通用字符作为原子 ![图片](http://blog.1024phper.com/static/qiniu/blog19083110392797876) 5.自定义原子表([])作原子,如'/[aj]sp/' ### 元字符 ![图片](http://blog.1024phper.com/static/qiniu/blog19080607150963708) 1.限定符 ![图片](http://blog.1024phper.com/static/qiniu/blog19080607151080007) 2.边界限定 ![图片](http://blog.1024phper.com/static/qiniu/blog19080607151051163) 3.句号(.) ![图片](http://blog.1024phper.com/static/qiniu/blog19080607151039381) 4.模式选择符 ![图片](http://blog.1024phper.com/static/qiniu/blog19080607151034887) 5.模式单元 ![图片](http://blog.1024phper.com/static/qiniu/blog19080607151058249) 6.后向引用 ![图片](http://blog.1024phper.com/static/qiniu/blog19080607151182558) ``` ' ; } else { echo $subject . ' 匹配失败
' ; } } // 正则匹配 yyyy-mm-dd 或yyyy/mm/dd $date1 = '2019/01/02'; $date2 = '2019-11-12'; $date3 = '2018/11-12'; // 1.错误示例 pregOk('/\d{4}[\/\-]\d{2}[\/\-]\d{2}/', $date1); pregOk('/\d{4}[\/\-]\d{2}[\/\-]\d{2}/', $date2); pregOk('/\d{4}[\/\-]\d{2}[\/\-]\d{2}/', $date3); // 结果如下: //2019/01/02 匹配成功 //2019-11-12 匹配成功 //2018/11-12 匹配成功 // 2.正确示例 pregOk('/\d{4}([\/\-])\d{2}\\1\d{2}/', $date1); pregOk('/\d{4}([\/\-])\d{2}\\1\d{2}/', $date2); pregOk('/\d{4}([\/\-])\d{2}\\1\d{2}/', $date3); // 结果如下 //2019/01/02 匹配成功 //2019-11-12 匹配成功 //2018/11-12 匹配失败 ``` 7.模式匹配优先级 ![图片](http://blog.1024phper.com/static/qiniu/blog19080607151114001) ### 模式修正符 ![图片](http://blog.1024phper.com/static/qiniu/blog19080607222925914) 如何禁止贪婪匹配,量词后加“?”,如“.*?”、“.+?” ## 正则函数 ### 字符串的匹配和查找 int preg_match(string pattern, string subject [,array matches]) int preg_match_all(string pattern, string subject [,array matches [,int flags]]) 该函数与与preg_match类似,不同的是函数preg_match()在第一次匹配之后就会停止搜索;而函数preg_match_all()则会一直搜索到指定字符串的结尾,可以获取所有匹配到的结果。 第四个flags有以下两个预定义的值: **PREG_PATTERN_ORDER**:默认值,对结果排序使$matches[0]为第一组匹配项的数组,$matches[1]为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。 **PREG_SET_ORDER**:对结果排序使$matches[0]为第一组匹配项的数组,$matches[1]为第二组匹配项的数组,以此类推。 ```
引流发单员
政务区
|
19小时前
|
三日结
传单派发
70- 120元/天
推广APP
蜀山区
|
19小时前
|
日结
网络推广
80- 120元/天
中公教育发单圈粉
庐阳区
|
19小时前
|
三日结
传单派发
50- 80元/天
水果店发单员
包河区
|
1天前
|
三日结
传单派发
80元/天
EOT; $pattern = '/\
\s+
(.*?)<\/div>/is'; if (preg_match($pattern, $html, $matches)) { echo '匹配到的字符串为:' . htmlspecialchars($matches[0]) . '
'; // 匹配到的字符串为:
引流发单员
echo '链接地址为:' . $matches[1] . '
'; // 链接地址为:http://www.wandoujob.com/HefeiShi/Job/2263.html echo '职位名称为:' . $matches[2] . '
'; // 职位名称为:引流发单员 } if ( preg_match_all($pattern, $html,$matches, PREG_SET_ORDER) ) { foreach ($matches as $match) { echo '匹配到的字符串为:' . htmlspecialchars($match[0]) . '
'; echo '链接地址为:' . $match[1] . '
'; echo '职位名称为:' . $match[2] . '
'; } } ``` preg_grep() 正则过滤数组 ``` 3 [3] => 3 [4] => 333 ) ``` preg_replace() 正则替换 ``` a3 [1] => c2 [2] => *** [3] => *** [4] => *** ) ``` preg_split():用正则表达式方法分割字符串 ``` 今天看比赛 [1] => 没什么意思 [2] => 三节打花 ) ```
字符串处理
SPL
文章目录