一、php正则简介

PHP中有两套正则匹配规则,一套基于POSIX,一套基于PCRE(英文全称:Perl Compatible Regular Expressions;翻译后就是“perl兼容正则表达式”,简称PCRE正则);自 PHP 5.3.0起, POSIX 正则表达式扩展被废弃,所以目前一般说PHP正则就是指PCRE正则。

PHP中主要的的正则表达式函数如下:

1.1、正则替换函数

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

函数功能:搜索subject中匹配pattern的部分, 以replacement进行替换。

此函数还有变体:

mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )

这个函数的行为除了 可以指定一个 callback 替代 replacement 进行替换 字符串的计算,其他方面等同于 preg_replace()

还有一个类似的函数:

mixed preg_filter ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

preg_filter()等价于preg_replace() 除了它仅仅返回(可能经过转化)与目标匹配的结果

1.2、执行一个正则匹配

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

搜索subject与pattern给定的正则表达式的一个匹配。

此函数也有类似函数:

int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )

搜索subject中所有匹配pattern给定正则表达式 的匹配结果并且将它们以flag指定顺序输出到matches中。

执行一个全局正则表达式匹配。

1.3、通过一个正则表达式分隔字符串

array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )

通过一个正则表达式分隔给定字符串。

1.4、其他正则函数

还有几个函数就不再详细介绍了:

array preg_grep ( string $pattern , array $input [, int $flags = 0 ] )

mixed preg_filter ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

string preg_quote ( string $str [, string $delimiter = NULL ] )

二、正则表达式的语法规则

汇总知识点

元字符

含义或用法

^

匹配字符串的开始位置标记

$

匹配字符串的结束位置标记

\

转义字符;将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。

*

匹配前面的子表达式零次或多次

+

匹配前面的子表达式一次或多次

?

匹配前面的子表达式零次或一次

{n}

n 是一个非负整数。匹配确定的 n 次

{n,}

n 是一个非负整数。至少匹配n 次

{n,m}

m 和 n 均为非负整数,其中n <= m ,表示最少匹配 n 次且最多匹配 m 次

.

匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。

[xyz]

字符集合。匹配所包含的任意一个字符

[^xyz]

负值字符集合。匹配未包含的任意字符,与前一个[xyz]意义刚好相反。

[a-z]

字符范围。匹配指定范围内的任意字符;匹配a到z的所有小写字母;同理取反[^a-z]

\b

匹配一个单词边界,也就是指单词和空格间的位置;这个多用于英文语句中的单词与单词间的空白匹配

\B

匹配非单词边界;与\b意义相反

\d

匹配一个数字字符。等价于 [0-9];同理取反\D (注意大小写,后续不再提示)

\f

匹配一个换页符。等价于 \x0c 和 \cL

\n

匹配一个换行符。等价于 \x0a 和 \cJ

\r

匹配一个回车符。等价于 \x0d 和 \cM

\s

匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v];同理取反\S

\t

匹配一个制表符。等价于 \x09 和 \cI

\v

匹配一个垂直制表符。等价于 \x0b 和 \cK

\w

匹配数字、字母和下滑线(也就是英文单词的构成成分)等价于[A-Za-z0-9_];同理取反\W

三、逆向引用、子模式和模式修饰符

3.1、逆向引用

PHP正则表达式中将匹配成功的模式中的某些特定部分进行存储,提供以后使用这些特定部分的能力。在一个正则表达式模式或部分模式两边添加圆括号()包裹划分开来,就可以把这部分表达式存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容按顺序存储;存储子匹配的缓冲区编号从1开始,连续编号至最大99个子表达式。每个缓冲区都可以使用\n或$n或${n}来表示其引用,其中n为1至99的阿拉伯数字,用来按顺序标识特定缓冲区。这种模式就叫逆向引用(或反向引用、后向引用)。

逆向引用主要出现在正则替换中。

例如:去除Html标签中的属性,留意preg_replace函数第二个参数。

$content = '

测试段落

';

$content = preg_replace('/]+>/','', $content);

###$content变量过滤后应该是如下内容:

#

测试段落

3.2、子模式

正则表达式匹配模式符中使用圆括号()包裹划分开来产生的部分称为子组(子模式),子组通过圆括号分隔界定,并且它们可以嵌套;将一个模式中的一部分标记为子组(子模式)主要是来做两件事情:

1、将可选分支局部化。比如,模式cat(arcat|erpillar|)匹配cat、cataract 、caterpillar中的一个,如果没有圆括号的话,它匹配的则是cataract、erpillar以及空字符串。

2、将子组设定为捕获子组。上述“逆向引用”中括号实现的子模式分组就是实现了这个捕获子组的功能。

子模式中圆括号履行的两种功能并不总是有用的。我们经常会有一种需求需要使用子组进行分组, 但又不需要(单独的)捕获它们。 在子组定义的左括号后面紧跟?:字符串会使得该子组不被单独捕获, 并且不会对其后子组序号的计算产生影响。

3.3、模式修饰符

正则表达式的模式修饰符:即在正则表达式中可以改变正则表达式特性的修饰性符号。

正则表达式的贪婪模式,以例子来说明比较形象一点:假设我们要匹配以字母a开头字母b结尾的字符串,但是需要匹配的字符串在a后面含有很多个b,比如abbbbbbbbbbbbbbbbb,那正则表达式是会匹配第一个b还是最后一个b呢?如果你使用了贪婪模式,那么会匹配到最后一个b,反之只是匹配到第一个b。也就是说贪婪模式是一种正则表达式中尽可能多的匹配模式。

i:如果在修饰符中加上"i",则正则将会取消大小写敏感性,即"a"和"A" 是一样的。

m:默认的正则开始^和结束$是对于整个字符串,如果在修饰符中加上"m",那么开始和结束将会是指字符串的每一行:每一行的开头就是^结尾就是$。

s:如果在修饰符中加入"s",那么默认的"."代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!

x:如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。

e:本修饰符仅仅对于preg_replace()函数中的replacement参数有用,代表在replacement中作为PHP代码。这个特性在PHP5.5中被废弃,已建议使用preg_replace_callback()代替。

A:如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说"/a/A"匹配"abcd"。

E:与"m"相反,如果使用这个修饰符,那么"$"将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。

U:和问号的作用差不多,用于设置"贪婪模式"。

四、实际应用举例

3.1、匹配html标签中的标记

也就是匹配由尖括号包裹起来的标签,如匹配

(也会匹配

之类的有属性的p标签)

]+>

3.2、去除html源代码中的换行符、制表符、回车等符号

$str=preg_replace("/[\t\n\r]+/","",$str);

3.3、效验字符串全部由数字构成;这种匹配不一定表示字符串是自然数,因为可能会是0开头

/^[0-9]{1,20}$/

3.4、去除html字符串中的所有js代码

##先去除所有script标签和标签内的js代码

$content = preg_replace('/

##再去除所有标签中的使用属性实现的js事件----有误杀,style、id、class等

$content = preg_replace('/<(\w+)\s+[^>]+>/', '<${1}>', $content);

上述第2行代码中,将存在误杀,可以修改下匹配条件,删除掉特定的诸如οnclick="xxx"、οnmοuseοver="xxx"等属性,而保留诸如id、class、data-xx、value等属性。

3.5、其他的正则汇总

"^\d+$"  //非负整数(正整数 + 0)

"^[0-9]*[1-9][0-9]*$"  //正整数

"^((-\d+)|(0+))$"  //非正整数(负整数 + 0)

"^-[0-9]*[1-9][0-9]*$"  //负整数

"^-?\d+$"    //整数

"^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0)

"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数

"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮点数(负浮点数 + 0)

"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数

"^(-?\d+)(\.\d+)?$"  //浮点数

"^[A-Za-z]+$"  //由26个英文字母组成的字符串

"^[A-Z]+$"  //由26个英文字母的大写组成的字符串

"^[a-z]+$"  //由26个英文字母的小写组成的字符串

"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串

"^\w+$"  //由数字、26个英文字母或者下划线组成的字符串

"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址

"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url

/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //  年-月-日

/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年

"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"   //Emil

"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?"     //电话号码

"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$"   //IP地址

^([0-9A-F]{2})(-[0-9A-F]{2}){5}$   //MAC地址的正则表达式

^[-+]?\d+(\.\d+)?$  //值类型正则表达式

转载请注明本文标题和链接:《php正则匹配的相关知识总结》

php正则匹配实验报告,php正则匹配的相关知识总结相关推荐

  1. 计算机组成原理语言方框图,计算机组成原理实验报告3 语言方框图

    南京信息工程大学滨江学院实验报告 实验名称 语音方框图 实验日期 2020 得分 指导教师 林美华 学院 物联网工程学院 年级专业班次 2020软件工程2班 姓名 刘旭 学号 20192346014 ...

  2. 计算机网络ospf实验报告,计算机网络ospf实验报告.pdf

    NANCHANG UNIVERSITY 计算机网络实验报告 专 业: 班 级: 学 号: 学生姓名: 2014 年 月 日 1 目录 实验 1:虚拟局域网( VLAN)综合实验 3 实验 2:静态路由 ...

  3. 聚类分析实验报告作业

    课程<生物数据处理>  老师:邓阳君老师         要求:请采用 k 均值.k 中心点.层次聚类或者模糊聚类等对 iris 数据进行聚类分析, 并评价其效果.实验报告应包括算法理论知 ...

  4. android碎片实验报告,三年级下册科学实验报告模板1篇

    三年级下册科学实验报告模板1篇 三年级下册科学实验报告模板1 第一单元 地球和地表的变化 (一).地球结构模型的制作 [实验目的]通过制作地球结构模型使学生更清楚地掌握地球内部的构造. [实验材料]各 ...

  5. 南邮C语言期末考试复习+实验报告

    目录 实验报告一 实验报告二 实验报告三 实验报告四 实验报告五 实验报告六 模块一:基础知识部分 模块二:三种基本结构及流程控制 模块三:函数 模块四:数据类型 模块五:文件 我自己的疑点: 实验报 ...

  6. Web前端开发技术课程实验报告实验3:Vue路由实验

    实验代码:实验3第2题实验参考.rar-互联网文档类资源-CSDN下载 Web前端开发技术课程实验报告 实验3:Vue路由实验 姓名:_ __ _ ___ ___   班级:_ _ _ ___ _ _ ...

  7. 爬取豆瓣以及王者所有英雄信息实验报告(小生不才,记得点赞加关注)

    实验任务 准备工作 学习网络爬虫相关知识和Python编程语法 学习爬虫需要调用的模块用法 python爬虫练习实验 练习urllib.bs.re.xlwt库的调用(了解requests第三方库) 熟 ...

  8. c语言实验报告实验六,C语言实验报告六

    实验内容: (1)编写求k!的函数,再调用该函数求C(m,n)=m!/(n! *(m-n)!)并输出. int jch(int x) { int i,s=1; for(i=1;i<=x;i++) ...

  9. 正则学习(2)--- 简单匹配原理

    写写对简单的匹配原理的理解,还是以php为主. 首先,正则引擎主要可分为两大类:DFA和NFA,反正引擎见多了就不奇怪了,简单理解就是不同的匹配方式,就好比在数组中查找数据时,有的是从头开始顺序,查找 ...

最新文章

  1. java spring注解教程,spring注解
  2. 同域内测试蠕虫的一种方法
  3. mysql 变量is null 和 not exists区别
  4. 关于-32768补码的问题
  5. 第七十期:IT技术人员的自我修养
  6. node npm包安装 save和save-dev的区别
  7. JVM(二)Java虚拟机组成详解
  8. mysql5.6开启memcache_php – 使用MYsql 5.6 Memcache
  9. ORACLE查看某个表的索引状态
  10. 【简单几句】应对焦虑
  11. 第一阶段✦第二章☞信息系统集成及服务管理
  12. python数据分析-学生成绩分析
  13. java fup spring
  14. npm link详解
  15. stellarium
  16. 苹果cms怎么上传本地视频资源
  17. 正方教务管理系统后台敏感日志查看漏洞
  18. Leetcode 858. 镜面反射 Python解法
  19. 在互联网上,没人知道你是一条狗
  20. 3D美术人员Technical Artist(TA技术美术)的学习之旅(2)

热门文章

  1. 浙江事业单位考不考计算机专业知识,浙江事业单位考试计算机相关综合知识,看哪些?...
  2. 我的2017——求职篇(四)
  3. 焓差法 空调制冷量 计算方法
  4. 蒙特卡罗方法在金融领域中的应用:从风险管理到投资组合优化
  5. uni-app实现获取验证码的倒计时
  6. python培训班 达内
  7. easy ui 中动态TreeGrid的使用
  8. 易语言 修改代码编辑窗口的字体格式大小 的方法
  9. android 2.3源码 百度网盘,Android 2.3.5源代码 更新至android 4.4,可以下载,度娘网盘...
  10. C# Base64 转 十六进制