PHP 正则表达式小结


Posted in PHP onFebruary 12, 2015

1.PHP中两个常用的正则函数

a.preg_match 正则函数,以perl语言为基础

语法:preg_match( mode,string subject,array matches)

说明:mode参数---- 正则的模块,也就是正则表达式(语法)
subject参数---- 正则的内容
matches参数---- 正则的结果(获得一个数组的形式)

b.ereg 正则函数,以POSIX基础(Unix、Script)

语法:ereg(mode ,string subject, array regs)

2.正则表达式中包括的元素

a.原子(普通字符:a-z A-Z 0-9 、原子表、转义字符)
b.元字符(有特殊功能的字符,如:# 、*)
c.模式修正符(系统内置部分字符 i、m、S、U ...)

3.正则表达式中的“原子”

a.a-z A-Z _ 0-9 //最常见的字符
b.(abc)(skd) //用圆括号包含起来的单元符号(一个整体)
c.[abcs][^abd] //用方括号包含的原子表,原子表中的^代表排除或相反的内容
d.转义字符
\d 包含所有的数字[0-9]
 \D 除所有数字外[^0-9]
 \w 包含所有英文字符[a-z A-Z 0-9]
 \W 除所有英文字符外[^a-z A-Z 0-9]
 \s 回车,换行等
......

注明: 圆括号 必须是整体才能匹配; 方括号 只要是其子集,都可以匹配(内容存在)

4.正则表达式元字符

* 匹配前一个内容的0次1次或多次
. 匹配内容的0次1次或多次,但不包含回车换行(代指自己,任何内容)
 + 匹配前一个内容的1次或多次
 ? 匹配前一个内容的0次或1次
| 选择匹配类似PHP中的| (因为这个运算符合是弱类型导致前面最为整体匹配,类似一个单词匹配)
^ 匹配字符串首部内容
$ 匹配字符串尾部内容
\b 匹配单词边界,边界可以是空格或者特殊符合(有单词分界符,类似空格)
\B 匹配除带单词边界意外内容(无单词分界符)
{m} 匹配前一个内容的重复次数为M次
{m,} 匹配前一个内容的重复次数大于等于M次
{m,n} 匹配前一个内容的重复次数M次到N次
( ) 合并整体匹配,并放入内存,可使用\\1 \\2…依次获取 (调用放入内存中的内容)

5.运算顺序

依然遵循从左到→右的运算规则

优先级:
( ) 圆括号因为是内存处理所以最高
* ? + { } 重复匹配内容其次
^ $ \b 边界处理第三
| 条件处理第四
 最后按照运算顺序计算匹配

6.模式修正符

模式修正符是为正则表达式增强和补充的一个功能,使用在正则之外 例如:/ 正则 / U

常用修正符:
i 正则内容在匹配时候不区分大小写(默认是区分的)
m 在匹配首内容或者尾内容时候采用多行识别匹配
s 将转义回车取消是为单行匹配如. 匹配的时候
x 忽略正则中的空白
A 强制从头开始匹配
D 强制$匹配尾部无任何内容 \n
U 禁止贪婪匹配 只跟踪到最近的一个匹配符并结束, 常用在采集程序上的正则表达式

7.匹配功能

preg_match_all 全部匹配函数
 语法:preg_match_all ( string pattern, string subject, array matches [, int flags] )

说明:对结果排序使 $matches[0] 为全部模式匹配的数
 用途:截取比较详细的内容,采集网页,分析文本

8.替换功能

preg_replace 正则替换函数
 语法:preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )

说明:通过正则表达式来替换相关内容,类似之前学过的str_replace字符串替换,但 功能要强于它
提示:1、替换内容可以是一个正则也可以是数组正则
2、替换内容可以通过修正符e来解决替换执行内容
 用途:替换一些比较复杂的内容上,也可以用于内容的转换上

9.分割功能

preg_split 正则切割
 语法:preg_split ( string pattern, string subject [, int limit [, int flags]] )
说明:通过正则表达式来切割相关内容,类似之前学过的explode切割函数,但explode 只能按照一种方式切割有局限性。

PHP 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
php smarty的预保留变量总结
Dec 04 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
Oct 23 PHP
一个经典的PHP验证码类分享
Nov 18 PHP
typecho插件编写教程(三):保存配置
May 28 PHP
thinkPHP简单遍历数组方法分析
May 16 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 #PHP
PHP动态输出JavaScript代码实例
Feb 12 #PHP
PHP使用JSON和将json还原成数组
Feb 12 #PHP
服务器上配置PHP运行环境教程
Feb 12 #PHP
PHP保存带BOM文件的方法
Feb 12 #PHP
自己写的php curl库实现整站克隆功能
Feb 12 #PHP
PIGCMS 如何关闭聊天机器人
Feb 12 #PHP
You might like
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
php Undefined index的问题
2009/06/01 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
jquery 学习笔记一
2010/04/07 Javascript
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
Javascript中replace()小结
2015/09/30 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
Python常见数据结构详解
2014/07/24 Python
Python中的匿名函数使用简介
2015/04/27 Python
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
python写一个md5解密器示例
2018/02/23 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
python用分数表示矩阵的方法实例
2021/01/11 Python
python数据抓取3种方法总结
2021/02/07 Python
联村联户简报
2015/07/21 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
Django rest framework如何自定义用户表
2021/06/09 Python
零基础学java之循环语句的使用
2022/04/10 Java/Android