PHP中有关正则表达式的函数集锦

之前学正则表达式的目的是想从网上抓取点小说啊,文档啊,还有获取相应的视频连接然后批量下载。当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有提到),之前根本就不知道有这东西,所以就自己废着劲去学习正则表达式,然后再学习PHP中正则表达式的函数是如何使用的,然后再分析自己要抓取的DOM,最后写自己的正则表达式,正则表达式,写着还可以,不过自己刚写完的正则表达式就可能看不出他是什么意思。

  有种调侃正则表达式式的说法,把正则表达式叫做火星文。当第一次用到Simple_html_dom.php这个工具包时有点相见恨晚的赶脚。不过还好,毕竟自己学了正则表达式了嘛,多学点东西还是没错的。自己写正则表达式然后再结合PHP中正则表达式函数使用,好处就是比用工具包灵活。

  下面是当时学习PHP中的正则表达式所总结的内容,和大家分享一下,欢迎大家批评指正

PHP中的正则表达式函数

  在PHP中有两套正则表达式函数库。一套是由PCRE(Perl Compatible Regular Expression)库提供的。PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数。另一套是由POSIX(Portable Operation System interface)扩展库提供的。POSIX扩展的正则表达式由POSIX 1003.2定义,一般使用以“ereg_”为前缀命名的函数。

两套函数库的功能相似,执行效率稍有不同。一般而言,实现相同的功能,使用PCRE库的效率略占优势。下面详细介绍其使用方法。

 正则表达式的匹配

  1.preg_match()

    函数原型:int preg_match (string $pattern, string $content [, array $matches])

    preg_match ()函数在$content字符串中搜索与$pattern给出的正则表达式相匹配的内容。如果提供了$matches,则将匹配结果放入其 中。$matches[0]将包含与整个模式匹配的文本,$matches[1]将包含第一个捕获的与括号中的模式单元所匹配的内容,以此类推。该函数只 作一次匹配,最终返回0或1的匹配结果数。

   2.ereg()和eregi()

    ereg()是POSIX扩展库中正则表达式的匹配函数。eregi()是ereg()函数的忽略大小写的版 本。二者与preg_match的功能类似,但函数返回的是一个布尔值,表明匹配成功与否。需要说明的是,POSIX扩展库函数的第一个参数接受的是正则 表达式字符串,即不需要使用分界符。

3.preg_grep()

  函数原型:array preg_grep (string $pattern, array $input)

  preg_grep()函数返回一个数组,其中包括了$input数组中与给定的$pattern模式相匹配的单元。对于输入数组$input中的每个元素,preg_grep()也只进行一次匹配。代码6.3给出的示例简单地说明了preg_grep()函数的使用。

进行全局正则表达式匹配

  1.preg_match_all()

  与preg_match()函数类似。如果使用了第三个参数,将把所有可能的匹配结果放入。本函数返回整个模 式匹配的次数(可能为0),如果出错返回False。   

  2.多行匹配

  仅仅使用POSIX下的正则表式函数,很难进行复杂的匹配操作。例如,对整个文件(尤其是多行文本)进行匹配查找。使用ereg()对此进行操作的一个方法是分行处理。

正则表达式的替换

   1.ereg_replace()和eregi_replace()  

  函数原型:string ereg_replace (string $pattern, string $replacement, string $string)

                  string eregi_replace (string $pattern, string $replacement, string $string)

  ereg_replace()在$string中搜索模式字符串$pattern,并将所匹配结果替换 为$replacement。当$pattern中包含模式单元(或子模式)时,$replacement中形如“\1”或“$1”的位置将依次被这些子 模式所匹配的内容替换。而“\0”或“$0”是指整个的匹配字符串的内容。需要注意的是,在双引号中反斜线作为转义符使用,所以必须使用“\\0”,“ \\1”的形式。

eregi_replace()和ereg_replace()的功能一致,只是前者忽略大小写。

  2.preg_replace()

  函数原型:mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject [, int $limit])

  preg_replace较ereg_replace的功能更加强大。其前三个参数均可以使用数组;第四个参数$limit可以设置替换的次数,默认为全部替换。

正则表达式的拆分

  1.split()和spliti()

  函数原型:array split (string $pattern, string $string [, int $limit])

  本函数返回一个字符串数组,每个单元为$string经正则表达式$pattern作为边界分割出的子串。如 果设定了$limit,则返回的数组最多包含$limit个单元。而其中最后一个单元包含了$string中剩余的所有部分。spliti是split的 忽略大小版本。

  2.preg_split()

  本函数与split函数功能一致。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据小魔方

左手用R右手Python系列之——数据框与apply向量运算

R语言与Python中的apply函数都有着丰富的应用场景,恰到好处的使用apply函数,可以避免在很多场景下书写冗余的代码,这不仅能提高代码可读性,而且提高代...

809110
来自专栏塔奇克马敲代码

第4章 表达式

18640
来自专栏calmound

sprintf的用法

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者...

36260
来自专栏我爱编程

Day18内建模块collections&base64collectionsbase64

collections collections是Python内建的一个集合模块,提供了许多有用的集合类。 namedtuple >>> from collect...

43280
来自专栏灯塔大数据

技术 | Python从零开始系列连载(八)

导读 上一期学习了Python特色数据类型(列表)上半节,相信大家都已经熟悉啦,我们这一期就来学习Python特色数据类型(列表)下半节吧! 列表切片 列表切片...

37560
来自专栏北京马哥教育

PEP8 Python 编码规范整理

作者:willhuo 来源:http://lib.csdn.net/article/python/1534 决定开始Python之路了,利用业余时间,争取更深入...

38260
来自专栏SeanCheney的专栏

Python基础回顾基本数据类型和运算容器分支和循环函数、生成器和类map, reduce和filter列表生成(list comprehension)字符串文件操作和pickle异常多进程(mult

Python shell输入import this 可以看到The Zen of Python 基本数据类型和运算 基本数据类型 Python中最基本的数据类...

49170
来自专栏程序猿DD

第一章 正则表达式字符匹配攻略

第一章 正则表达式字符匹配攻略 正则表达式是匹配模式,要么匹配字符,要么匹配位置。请记住这句话。 然而关于正则如何匹配字符的学习,大部分人都觉得这块比较杂乱。...

288100
来自专栏Python小屋

Python 3.6.x字符串格式化方法小结

1 使用%符号进行格式 使用%符号进行字符串格式化的形式如下图所示,格式运算符%之前的部分为格式字符串,之后的部分为需要进行格式化的内容。 ? Python...

31460
来自专栏Java学习123

40个你可能不知道的Python的特点和技巧

282100

扫码关注云+社区

领取腾讯云代金券