辛星教你高速掌握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是用于存储和传输数据的格式,通常用于向服务器端传递数据. ** ...
随机推荐
- ARP协议具体解释之ARP动态与静态条目的生命周期
ARP协议详细解释之ARP动态与静态条目的生命周期 ARP动态条目的生命周期 动态条目随时间推移自己主动加入和删除. q 每一个动态ARP缓存条目默认的生命周期是两分钟.当超过两分钟,该条目会被删掉 ...
- node - 导包机制
在学node js的时候,经常各种导包 let http = require('http'); 然后它的运行机制: 1. 查找当前目录下面的node_modules 2. 全局查找(首先添加到path ...
- DirectShow控制台输出和保存视频设备名称
#include "windows.h" #include "TCHAR.h" #include <dshow.h> #include <ve ...
- react-native + react-native-tab-navigator 实现 TabBar
1.安装 react-native-tab-navigator yarn add react-native-tab-navigator 2.页面调用 /** * 主页面 */ import React ...
- Linux下中断程序导致写文件失败的分析
案例: 一个普通linux C程序,执行期间会进行多次printf操作,利用bash脚本重定向功能,将stdout重定向到一个另一个文件中去.在运行途中用ctrl+C终止程序,发现定向文件始终为空,即 ...
- SSH——基于BaseDao和BaseAction实现用户登录
基于BaseDao和BaseAction实现用户登录 1. 首先修改login.jsp页面,点击登录按钮,提交表单 <a onclick="document.forms ...
- 未能加载文件或程序集“WebGrease, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
方法一:在web.config的configuration接点中添加,最好是添加在configuration节点的最后 <runtime> <assemblyBinding xmln ...
- centos下nginx启动脚本和chkconfig管理
在安装完nginx后,重新启动需要“kill -HUP nginx进程编号”来进行重新加载,显然十分不方便.如果能像apache一样,直接通过脚本进行管理就方便多了. nginx官方早就想好了,也提供 ...
- Atitit.python web环境的配置 attilax 总结
Atitit.python web环境的配置 attilax 总结 1. 下载modpython/1 1.1. 安装python2.5.11 1.2. 安装modpython1 2. 设置py文件的u ...
- 机器学习经典算法具体解释及Python实现--线性回归(Linear Regression)算法
(一)认识回归 回归是统计学中最有力的工具之中的一个. 机器学习监督学习算法分为分类算法和回归算法两种,事实上就是依据类别标签分布类型为离散型.连续性而定义的. 顾名思义.分类算法用于离散型分布预測, ...