PHP中的正则表达式的使用
PHP中的正则表达式基础知识
1.正则表达式就是描述字符串排列模式的一种自定义语法规则
2.如果可以使用字符串处理函数完成的任务,就不使用正则表达式
3.有一些复杂的操作,只能使用正则表达式完成
4.正则表达式也称为一种模式表达式
5.正则表达式就是通过构建具有特定规则的模式,与输入的字符信息比较,在进行分割、匹配、查找、替换等工作
例:"/\<img\s*src=\".*?\"\/\>/"
a.正则表达式也是一个字符串
b.由具有特殊意义的字符串组成的字符串
c.具有一定编写规则,也是一种模式
d.看作是一种编程语言(是用一些特殊字符,按规则编写出一个字符串,形成一种模式---正则表达式)
注意:如果正则表达式,不和函数一起使用,则它就是一个字符串,只有将正则表达式放到某个函数中使用,才能发挥出正则表达式的作用。
在PHP中给我们提供两套正则表达式函数库
POSIX扩展正则表达式函数库
Perl兼容正则表达式函数库
这两个函数功能一样,找一个处理字符串效率高的
注意:由于功能一样,所以推荐使用Perl兼容正则表达式函数库
正则表达式的模式如何编写
例:"/\<img\s*src=\".*?\"\/\>/iU"
语法:
1.定界符 //
除了字母、数字和正斜线\以外的任一字符都可以是定界符
| |
/ /
{ }
! !
我们一般使用//
2.原子。 img \s .
注意:原子是正则表达式的最基本组成单位,而且必须至少要包含一个原子
只要一个正则表达式可以单独使用的字符,就是原子
1.所有打印(所有可以用键盘在屏幕上输出的字符串)和非打印字符(看不到的)
2.* + ? ( . < 如果所有有意义的字符,想要作为原子使用,统统使用“\”转义字符转义
在无特殊意义的字符前使用转义字符时还是把它看成普通字符来看
转义字符可以将有意义的字符转成没意义的字符,还可以将没意义的字符转成有意义的字符
3.在正则表达式中可以直接使用一些代表范围的原子
\d :表示任意一个十进制的数字 [0-9]
\D :表示任意一个除了数字外的字符 [^0-9]
\s :表示任意一个空白字符。空格、\n\r\t\f [\n\r\t\f ]
\S :表示任意一个非空白字符 [^\n\r\t\f ]
\w :表示任意一个字。a-zA-Z0-9_ [a-zA-Z0-9_]
\W :表示任意一个非字。除了a-zA-z0-9_ [^a-zA-Z0-9_]
4.自己定义一个原子表[],可以匹配方括号中的任何一个原子
例:[0-5p-z]
3.元字符 * ?
元字符是一种特殊的字符,是用来修饰原子用的,不可以单独使用
* :表示其前面原子可以出现的次数 0次、1次、或多次 {0,}
+ :表示其前面的原子出现1次或多次,不能没有至少一次 {1,}
? :表示其前面的原子出现0次或1次,有只能一次,要么没有 {0,1}
{} :用于自己定义前面的原子出现的次数
{m} m表示一个整数, {5}表示前面的原子出现5次
{m,n} m和n表示整数,{2,5}表示前面的原子出现2-5次
{m,} 表示前面的原子至少出现m次
. :默认情况下,表示除换行符外的任意一字符
^ :直接在一个正则表达式的第一个字符出现,则表示字符串必须以这个正则表达式开始
$ :直接在一个正则表达式的最后字符出现,则表示字符串必须以这个正则表达式结尾
| :表示或的关系,它的优先级是最低的,最后考虑它
\b :表示一个边界
\B :表示一个非边界
重点 () :
1.()作用:是作为大原子使用
2.改变优先级
3.作为子模式使用,正则表达式不光对一个字符串匹配一次,全部匹配作为一个大模式,放在数组的第一个元素中,每个()是一个子模式按顺序放到数组的其他元素中去
4.可以取消子模式,就将()作为大原子或改变优先级使用,在大括号中最前面使用?:就可以取消这个()表示的子模式
5.反向引用,可以在模式中直接将子模式取出来,再作为正则表达式模式的一部分,如果是在正则表达式像替换函数preg_replace函数中,可以将子模式取出,在被替换的字符串中使用
\1取第一个子模式 \2取第二个子模式。。。。。
<?php $pattren="/((?:\d{4})\W\d{2}\W\d{2})\s+((\d{2})\W\d{2}\W\d{2})\s+(am|pm)/"; $string="today is 2016-08-09 15:30:00 pm..."; if(preg_match($pattren,$string,$arr)){ echo "正则表达式<b>{$pattren}<b>和字符串<b>{$string}<b>匹配成功<br>"; echo '<pre>'; print_r($arr); echo '</pre>'; }else{ echo "<font color='red'>正则表达式{$pattren}和字符串{$string}匹配失败</font>"; } ?>
4.模式修正符号 i u
"//模式修正符号"
1.可以一次使用一个,每一个都具有一定的意义,也可以连续使用多个
2.是对整个正则表达式的调优使用,也可以说是对正则表达式功能的扩展
例;"/abc/" 只能匹配小写字母 abc
"/abc/i" 可以不区分大小写的匹配
i :表示在和模式进行匹配时不区分大小写
m :默认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅仅匹配字符串的结束,或者最后一个字符是换行符时其前面(除非设定了 D 修正符)
当设定了此修正符,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有“\n”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果
s :如果没有使用这个模式修正符时,元字符中的“.”就不能匹配换行符,使用后就可以了。
x :表示模式中的空白忽略不计
e : 如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
只有 preg_replace() 使用此修正符,其它 PCRE 函数将忽略之。
A :如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配。此效果也可以通过适当的模式本身来实现
Z :
U :本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符或者在数量符之后跟一个问号(如 .*?)来启用此选项。
/原子核元字符/模式修正符号 /为定界符
PHP中的正则表达式的使用的更多相关文章
- PHP中有关正则表达式的函数集锦
之前学正则表达式的目的是想从网上抓取点小说啊,文档啊,还有获取相应的视频连接然后批量下载.当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有 ...
- JavaScript中的正则表达式(终结篇)
JavaScript中的正则表达式(终结篇) 在之前的几篇文章中,我们了解了正则表达式的基本语法,但那些语法不是针对于某一个特定语言的.这篇博文我们将通过下面几个部分来了解正则表达式在JavaScri ...
- Coursera-Getting and Cleaning Data-week4-R语言中的正则表达式以及文本处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Thursday, January 29, 2015 补上第四周笔记,以及本次课程总结. 第四周 ...
- 9.JAVA中的正则表达式
一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ? #{0,1}-?有一个-或者没有 \\ #表示一个" ...
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- 工作随笔——UIButton的EdgeInsets + Swift中的正则表达式;
1.UIButton的EdgeInsets UIButton的EdgeInsets方法,是用来设置title和image对于上左下右四个方向的偏移,但是很奇怪的是,刚开始只有Image,titile也 ...
- Javascript中的正则表达式
Javascript中的正则表达式 刚开始接触正则表达式的时候,觉得这是个很死板的东西(没办法,计算机不能像人眼一样能很快的辨认出我们需要的结果,它需要一定的规则来对它进行限制),了解的越多,发现这个 ...
- 在Visual Studio中使用正则表达式匹配换行和批量替换
系统环境:Windows 8.1 Enterprise Update 2 x64 开发环境:Mircosoft Visual Studio Ultimate 2013 Update 2 RC 问题:如 ...
- 浅谈JavaScript中的正则表达式
引言 对于正则表达式我想作为程序员肯定使用过它,那天书般的表达方式,我用一次就记住它了.这篇博客先介绍一些正则表达式的内容,然后介绍JavaScript中对正则表达式特有的改进.下面开始介绍正则表达式 ...
- 任督二脉之Shell中的正则表达式
VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进. Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyz ...
随机推荐
- JSONP的学习(收集整理)
JSONP和JSON之间有什么联系吗? JSON(JavaScript Object Notation) 是一种轻量级.可读的基于文本的的数据交换格式.,是一种轻量的数据交换开放标准.源于JavsSc ...
- ios基础篇(六)——UITextView的常用方法及技巧
上篇说到了UITextField,我们先来说说UITextView和UITextField的不同: UITextView支持多行输入; UITextFiled只支持单行; UITextView没有pl ...
- Maven(1)-安装和配置
Maven(1)-安装和配置 一.本机必须安装好Jdk 二 .maven下载 http://maven.apache.org/download.cgi ,下载后把maven-bin解压到自己的目录即可 ...
- ZZC语言代码风格
程序员之路--关于代码风格 优秀的代码风格如同一身得体的打扮,能够给人以良好的印象.初学程序设计,首先必须建立良好的编程习惯,这其中就包括代码风格.本文就代码风格中的几个重点问题进行了讨论,并在文后给 ...
- synchronized和static synchronized的比较
群里讨论的一个问题,网上别人已经贴出了很详细的说明,这里补充记录下,后面加入个人测试代码. 起因:1月份的时候看群里讨论一道问题,问题内容如下: 一个日本作者-结成浩的<java多线程设计模式& ...
- 推荐10款非常优秀的 HTML5 开发工具
HTML5 发展如火如荼,随着各大浏览器对 HTML5 技术支持的不断完善以及 HTML5 技术的不断成熟,未来 HTML5 必将改变我们创建 Web 应用程序的方式.今天这篇文章向大家推荐10款 ...
- C#重启系统代码
C#重启窗体代码 System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location ...
- [Js]瀑布流
描述: 1.每个图片宽度都一样,高度不一样 思路: 1.算出一共有几列(通过视窗总宽度/单个图片宽度得出) 2.根据一共几列*单个图片宽度,设置外围总宽度并水平居中(注:这个宽度应该是计算出来的,而不 ...
- iOS产品开发流程
iOS产品开发流程 a.产品经理做需求调研,确定产品需求,编写需求文档 b.产品人员完成产品原型 c.产品经理召开会议(产品,UI,UE,开发,测试,服务器) d.设计人员根据原型设计出一系列UI界面 ...
- Oracle合并函数内容
--MINUS去差集,取第一个集合有的而第二集合没有的,并以第一个字段排序select t.bumenbm from T_HQ_BM t minus select b.bumenbm from t_h ...