辛星教你高速掌握PHP的正則表達式
首先说一下,这篇文章也是我在看了数个大牛的博客之后总结出来的,因此首先向这些大牛表示崇高的敬意和感谢,因为人数众多。并且来源也是特别分散,就不一一介绍了,见谅。
************跨语言的主题**************
1.就如同xml、json、cookie、session、get、post等话题一样。正則表達式是一个跨越了语言的话题。差点儿绝大多数语言都支持正則表達式。能够说。仅仅要这门语言支持字符串,它就应该支持正則表達式,由于非常多功能不使用正則表達式特别麻烦 ,可是使用了正則表達式就非常easy。
2.正則表達式能够用于邮箱、QQ、手机号等的验证,并且还能够用于採集网页,当然,说白了。正則表達式能够胜任绝大多数对于字符文本的操作,当然,对于解析xml等文件,正則表達式则显得并非非常强力。只是正則表達式对于提取xml中特定的文本信息,依旧非常给力。
3.因此,学好正則表達式,不论将来转学哪门语言,都是很easy的。
*************正則表達式的作用**********
1.正則表達式的主要作用有三个,第一个是正则匹配。第二个是正则替换。第三个是正则提取。
2.所谓正则匹配,是验证一串文本是否符合某个正則表達式规则。比方我们验证用户的是否是一个邮箱,就用到了正则匹配。
3.所谓正则替换,就是我们把文本中的某些信息给替换成另外一些信息,类似于word编辑器中的查找替换功能。高速纠错。
4.所谓正则提取,即使我们从文本中依据我们的正則表達式提取出须要的信息。比方我们从一个html文件里提取出全部的<img>标签,然后依据它的src属性来得到全部的图片的超链接。这就是从一大串文本信息中提取自己会用到的信息 。
5.我们先学习正則表達式的书写,然后在学习怎样在PHP中使用正則表達式函数来操作正則表達式。
****************正則表達式的书写规则一***************
1.正則表達式通经常使用/来作为定界符。即两个斜线之间的部分被当做正則表達式的规则,我们用它去匹配其它的文本,比方/xinxing/这个正則表達式就表示仅仅能比配字符串xinxing。
2.上面我们也看到了,我们的字符是能够出如今正則表達式中的,它们的作用也就是相当于匹配中的一个字符,可是。正則表達式也提供了一些元字符来让我们更加方便的来操作这些字符,这些元字符前面跟一个字符叫做前导字符,一个前导字符和一个元字符一起起作用。
3.我们用+表示其前导字符在目标中连续出现一次或多次。*表示其前导字符在目标中出现零次或者多次。而?则规定其前导对象必须在目标对象中连续出现零次或者一次。其后面的则无论了。
4.比方/xin+/能够匹配到xin,xinnnn,xinn,xinnnnn等,由于这里的+使得n能够出现一次或者多次,而xin?则能够匹配xinxing。xingui,xinguimeng等字符,仅仅要前面有xin就能够了。
5.元字符是一种非常粗糙的指定次数的方式。我们能够採用更加精细的操作,比方{m,n}表示至少出现m次,至多出现n次,{m,}表示至少出现m次,{,n}表示至多出现n次,而{t}表示出现固定的t次。
6.比方/xin{3,4}/能够匹配xinnn和xinnnn这两种情况。
**************正則表達式的书写规则二*****************
1.前面我们能够用单个的字符用来做前导字符。显然这是非常弱的,我们能够有它的boss版,当中\s用于匹配单个空格符。包含制表符和换行符。\S表示用于匹配单个除了空格之外的全部字符,\d用于匹配从0到9的字符。\w用于匹配字母数字下划线,\W用于全部与\w不匹配的字符。单独的一个点号.表示撇配除了换行之外的全部字符。从上面的数据能够看出。\s和\S的意义正好相反,\w和\W也是这样。
2.比方/\s+/能够用于匹配n个空格,/\d00/能够匹配000、100、200等整百的数字。
***************正則表達式中的定位符和范围表示*********
1.正則表達式中还有所谓的定位符的说法,当中^必须出如今字符串的开头,而$则必须出如今字符串的结尾。而\b则必须出如今目标字符串的开头或者结尾,而\B则必须不能出如今开头或者结尾,仅仅能出如今中间部分。
2.事实上能够看出^和$是一对反义词,而\b和\B也是一对反义词。
3.我们能够用一个中括号括起来表示一个字符。而在里面指定范围。比方/[a-z]/表示小写字母从a到z。比方/[0-9]/表示小写字母从0到9的一个数字。比方/[a-c2-6]/表示从a到c或者从2到6的一个字母或者数字相匹配.
4.这样的范围修饰符能够和元字符相连的,比方/[a-z][0-9]+/表示以一个字母作为先导。然后跟一个或者多个数字。
5.还有否定符号^用在中括号内表示的是排除,比方[^a-c]表示除去abc之外的任一字母,当^位于中括号内的时候,表示否定,当它位于中括号外的时候,被视作定位符。
6.我们通经常使用\表示转义符号。没错。在正則表達式中,我们也须要用\表示转义,比方\*就表示匹配*这个符号。
*****************小括号*****************
1.前面说到。元字符仅仅能作用于其前导字符,我们能够用小括号把若干个字符括起来。作为一个总体。此时元字符就能够作用于多个字符了。
2.比方a(bc)*表示一个a后面跟着0个或者多个bc。
3.比方a(bc){0,7}表示a后面跟着0个到7个bc都能够。
4.另一个|表示OR,即逻辑与。表示两个中选择一个。
5.比方hi|hello表示匹配hi或者hello,比方(a|b)c表示匹配ac或者bc。
**************小练习****************
1.经过我们前面的介绍,我们这里进行一下小小的演练,看看我们到底掌握了多少。
2.事实上ab*和ab{0,}表达的意思是同样的,ab?
表示匹配a或者ab。
**********************备注*****************
1.上面我们解说了正則表達式最基本的部分。还有些细枝末节没有顾忌到,以下我把比較重要的再说一下。
2.前面我们说到了用/来作为定界符,事实上还能够用#作为定界符。它是在正則表達式中/出现较多的时候用的。此时正則表達式中的斜线不须要转义。
3.在正則表達式的最后加一个i表示不区分大写和小写。
4.我们能够分组,也有人称之为群,即Group,调用格式为(?P<组名>) 调用方式 (?P=组名)。
**************PHP函数****************
1.我们用preg_match来完毕正则匹配的功能,它的第一个參数是正則表達式,第二个參数是要匹配的文本。第三个參数是可选择,表示匹配到的信息,事实上它有五个參数。可是我们往往用不了那么多,例如以下代码演示样例:
<? php
//定义一个正則表達式
$reg ="/xi/";
//定义一个字符文本
$msg ="xinxisgxagxiagslgxigsghg";
//这里使用了所有匹配
preg_match_all($reg,$msg,$match);
//输出匹配到的所有信息
print_r($match);
2.上面样例的输出结果是:
Array ( [0] => Array ( [0] => xi [1] => xi [2] => xi [3] => xi ) )
3.我们能够用preg_replace来进行正则替换,比方我们用例如以下代码吧所有的xi都替换为了oo。代码截图:
<?php
//定义一个正則表達式
$reg ="/xi/";
//定义一个字符文本
$msg ="xinxisgxagxiagslgxigsghg";
//定义替换文本
$rep = "oo";
//这里使用了所有匹配
$str = preg_replace($reg,$rep,$msg);
//输出匹配到的所有信息
echo $str;
4.输出结果:oonoosgxagooagslgoogsghg
5.正则切割,是把原字符串通过对应的形式进行切割为数组,我们使用preg_split函数,代码演示样例:
<?php
//使用逗号或空格来分隔短语
$reg = "/[\s,]+/";
//定义原字符串
$msg = "hypertext language, programming";
$keywords = preg_split($reg,$msg );
print_r($keywords);
6.输出结果:
Array ( [0] => hypertext [1] => language [2] => programming )
********************总结**********************
1.正則表達式是典型的难学易忘的知识,希望能够与诸位读者共勉。
2.我们每到一定的时间就温习一次。
辛星教你高速掌握PHP的正則表達式的更多相关文章
- 辛星跟您玩转vim第三节之程序猿特须要的移动方式
前面第二节我首先值得一提的是,我的vim教程pdf版本号已经写完了.大家能够去下载,这里是csdn的下载地址:csdn下载.假设左边的下载地址挂掉了.也能够自行在浏览器以下输入例如以下地址进行下载:h ...
- 跟着辛星认识一下PHP的自己主动载入
作为一个框架,文件的载入机制是不能少的,那么我们应该怎么载入呢,这些PHP已经给我们想好了,所以我们仅仅须要依照规则办事就能够了,PHP中有两个函数能够完毕这个功能,第一个是__autoload,如今 ...
- 辛星跟您玩转vim第二节之用vim命令移动光标
首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载.这里是csdn的下载地址:csdn下载.假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http:// ...
- 2014年辛星解读Javascript之DOM高速入门
在Javascript的知识中,有一个所谓的DOM.即文档对象模型,我们能够通过它来訪问HTML文档的元素,当网页被载入的时候,浏览器会去创建DOM,有了这个DOM.我们能够使用Javascript去 ...
- 辛星跟您玩转vim第一节之vim的下载与三种模式
首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载,这里是csdn的下载地址:点此下载 ,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http://d ...
- 辛星跟您解析在CSS面包屑中三角形的定位问题
刚才看到有位网友非常纳闷第二个棕色三角形是怎么定位的,我当感觉在以下说不清楚,就特别开了一片博客.来说清楚它.首先,前面的代码我们先抄下来,至于前面这部分代码是怎么来的,读我的用CSS制作面包屑导航的 ...
- 2014年辛星解读css第一节
CSS是Cascading Style Sheets的缩写.即层叠样式表,它用于表现HTML的样式,即HTML仅仅是去写该网页有哪些内容,至于怎样去表现它们,由CSS去定制. ************ ...
- 2014年辛星完全解读Javascript第七节 数组和对象
由于Javascript是脚本语言,因此,使用起来非常方便,数组的使用也是比较简单的,下面我们就主要介绍一下Javascript中数组的介绍,以及上一节中没有完成的对象的介绍. *********** ...
- 2014年辛星完全解读Javascript第八节 json
json是JavaScript Object Notation的简写,它是一种轻量级的数据交换格式,而且表达上很容易靠字面去理解.json是用于存储和传输数据的格式,通常用于向服务器端传递数据. ** ...
随机推荐
- 【网络】再谈select, iocp, epoll,kqueue及各种I/O复用机制 && Reactor与Proactor的概念
首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal drive ...
- NFSv4 mount incorrectly shows all files with ownership as nobody:nobody
NFSv4 mount incorrectly shows all files with ownership as nobody:nobody https://access.redhat.com/ ...
- Netty 中文教程 (二) Hello World !详解
1.HelloServer 详解 HelloServer首先定义了一个静态终态的变量---服务端绑定端口7878.至于为什么是这个7878端口,纯粹是笔者个人喜好.大家可以按照自己的习惯选择端口.当然 ...
- SpringMVC整合quartz,实现定时任务
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId& ...
- Win7如何自定义桌面右键菜单
1 在注册表的HKEY_CLASSES_ROOT\DesktopBackground\Shell\位置,我们新建一个计算器,他的下面有一个项目command,然后这个command去打开计算器(通过分 ...
- win8.1休眠状态下不能进入系统
win8.1下进入睡眠状态出现的问题: 1.合上盖子或者是点击睡眠状态后唤醒进入锁屏界面.可是仅仅能鼠标移动,键盘全然输入不了,出现假死现象,仅仅能强制重新启动. 2.合上盖子再打开无法唤醒屏幕,必须 ...
- Django——如何使用Template以及如何向template传递变量
如何使用模板系统 在Python代码中使用Django模板的最基本方式如下: 可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创建 Temp ...
- Java模式开发之责任链模式
Java模式开发之责任链模式 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次坐定位置,由一人击鼓.击鼓的地方与传花的地方是分开的.以示公正. 開始击鼓时,花束就開始依次传递,鼓 ...
- rpm安装找不到.so库文件(linux动态库连接的相关知识)(转)
1.找不到库文件的原因 库文件不存在 这种情况一般是因为所需要的包没装,只要安装相应的包就可以解决 存在而系统不知道 这种情况一般出现在自己编译软件时候 确保库文件所在的路径已加入系统,在/etc/l ...
- android 类似微信的摇一摇实现
一.在 AndroidManifest.xml 中添加操作权限 <uses-permission android:name="android.permission.VIBRATE&qu ...