仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1226|回复: 20
打印 上一主题 下一主题

[学习教程] PHP教程之PHP中正则的利用

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:51:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我想在讲述自己的学习方式前,对那些期望能从我的文章中获得有用信息的人说一句心里话:正则表达式,作为一种疾速、便捷的处置字符串的东西,在各类编程言语中都有着普遍的用处,经由过程在PHP中的一些利用,上面纪录一下关于PHP中正则利用的一些技能。   我的正则入门,是发源于网上的一篇文章[1],这篇文章由浅入深的论述了正则利用的办法,我感觉是一个很好的入门资料,不外学成仍是要靠团体,在利用的过程当中,仍是会不休地健忘,因而反重复复的浏览了这篇文章有四五遍,关于个中一些对照坚苦的常识点,乃至要用好久才干消化,然而只需能见保持着看完,你会发明本人关于正则的应用才能就会明显进步。
正则表达式:
用于描写字符分列和婚配形式的一种语律例则。它次要用于字符串的形式朋分、婚配、查找及交换操作。
PHP中的正则函数:
php中有两套正则函数,二者功效差不多,分离为:
一套是由PCRE(Perl Compatible Regular Expression)库供应的。利用“preg_”为前缀定名的函数;
一套由POSIX(Portable Operating System Interface of Unix )扩大供应的。利用以“ereg_”为前缀定名的函数;(POSIX的正则函数库,自PHP 5.3今后,就不在保举利用,从PHP6今后,就将被移除)
因为POSIX正则行将推出汗青舞台,而且PCRE和perl的模式差不多,更利于咱们在perl和php之间切换,所以这里重点引见PCRE正则的利用。
PCRE正则表达式
PCRE全称为Perl Compatible Regular Expression,意思是Perl兼容正则表达式。
在PCRE中,凡是将形式表达式(即正则表达式)包括在两个反斜线“/”之间,如“/apple/”。
正则中主要的几个概念有:元字符、本义、形式单位(反复)、反义、援用和断言,这些概念都可以在文章[1]中轻松的了解和把握。
经常使用的元字符(Meta-character):
元字符     申明
\A       婚配字符串串首的原子
\Z       婚配字符串串尾的原子
\b       婚配单词的界限     /\bis/   婚配头为is的字符串   /is\b/   婚配尾为is的字符串   /\bis\b/ 定界
\B       婚配除单词界限以外的恣意字符   /\Bis/   婚配单词“This”中的“is”
\d     婚配一个数字;等价于[0-9]
\D     婚配除数字之外任何一个字符;等价于[^0-9]
\w     婚配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_]
\W     婚配除英文字母、数字和下划线之外任何一个字符;等价于[^0-9a-zA-Z_]
\s     婚配一个空白字符;等价于[\f\t\v]
\S     婚配除空白字符之外任何一个字符;等价于[^\f\t\v]
\f     婚配一个换页符等价于 \x0c 或 \cL
                    婚配一个换行符;等价于 \x0a 或 \cJ
         婚配一个回车符等价于\x0d 或 \cM
\t     婚配一个制表符;等价于 \x09\或\cl
\v     婚配一个垂直制表符;等价于\x0b或\ck
\oNN   婚配一个八进制数字
\xNN   婚配一个十六进制数字
\cC    婚配一个掌握字符
形式修改符(Pattern Modifiers):
形式修改符在疏忽巨细写、婚配多行中利用出格多,把握了这一个修改符,常常能处理咱们碰到的良多成绩。
i     -可同时婚配巨细写字母
M     -将字符串视为多行
S     -将字符串视为单行,换行符做通俗字符对待,使“.”婚配任何字符
X     -形式中的空白疏忽不计   
U     -婚配到比来的字符串
e     -将交换的字符串作为表达利用
格局:/apple/i婚配“apple”或“Apple”等,疏忽巨细写。     /i
PCRE的形式单位:
//1 提取第一名的属性
/^\d{2} ([\W])\d{2}\\1\d{4}$婚配“12-31-2006”、“09/27/1996”、“86 01 4321”等字符串。但上述正则表达式不婚配“12/34-5678”的格局。这是由于形式“[\W]”的了局“/”已被存储。下个地位“\1”援用时,其婚配形式也是字符“/”。
当不需求存储婚配了局时利用非存储形式单位“(?:)”
例如/(?:abc)(DEF)\\1g/ 将婚配“aEEg”。在一些正则表达式中,利用非存储形式单位是需要的。不然,需求改动厥后援用的按次。上例还可以写成/(abc)(CEF)\2g/。
PCRE正则表达式函数:
preg_match()和preg_match_all()
preg_quote()
preg_split()
preg_grep()
preg_replace()
函数的详细利用,咱们可以经由过程PHP手册来找到,上面分享一些平常堆集的正则表达式:
     婚配action属性
     $str = '<form name="adfa" action="asdf.bphp" target=""><form name="bbbb" action="http://www.bac.com/test.php" target="qwerqwerq"><form name="bbbb" action="http.php" target="qwerqwerq">';
     $match = '';
     preg_match_all('/\s+action=\"(?!http:)(.*?)\"\s/', $str, $match);
     print_r($match);
     
     在正则中利用回调函数
     /**
      * replace some string by callback function
      *
      */
     function callback_replace() {
         $url = 'http://esfang.house.sina.com.cn';
         $str = '<form name="adfa" action="asdf.bphp" target=""><form name="bbbb" action="http://www.bac.com/test.php" target="qwerqwerq"><form name="bbbb" action="http.php" target="qwerqwerq">';
         $str = preg_replace ( '/(?<=\saction=\")(?!http:)(.*?)(?=\"\s)/e', 'search(\$url, \\1)', $str );
         
         echo $str;
     }
     
     function search($url, $match){
         return $url . '/' . $match;
     }
     
     带断言的正则婚配
     $match = '';
     $str = '<a href="">xxxxxx.com.cn</a> _fcksavedurl=""">xxxxxx.com.cn</a>" <b>bold font</b> <p>paragraph text</p>';
     preg_match_all ( '/(?<=<(\w{1})>).*(?=<\/\1>)/', $str, $match );
     echo "<br />婚配没有属性的HTML标签中的内容:";
     print_r ( $match );
交换HTML源码中的地址   
     $form_html = preg_replace ( '/(?<=\saction=\"\ssrc=\"\shref=\")(?!http:javascript)(.*?)(?=\"\s)/e', 'add_url(\$url, \'\\1\')', $form_html );
最初,正则东西固然壮大,然而从效力和编写工夫下去讲,有的时分能够没有explode来的更直接,关于一些告急或请求不高的义务,复杂、粗犷的办法或许更好。
而关于preg和ereg两个系列之间的履行效力,曾看到文章说preg要更快一点,详细因为利用ereg的时分其实不多,并且也要推出汗青舞台了,再加个团体更偏好过PCRE的体例,所以笔者就不做对照了,熟习的伴侣可以宣布下定见,感谢。    小狼的世界
当然你可以把你最基本的功能放出来的时候就放出来,比如放到论坛上,让大家都参与,
沙发
发表于 2015-2-4 06:30:23 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
活着的死人 该用户已被删除
板凳
发表于 2015-2-5 07:51:34 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-5 23:57:57 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
admin 该用户已被删除
5#
发表于 2015-2-14 09:47:20 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
蒙在股里 该用户已被删除
6#
发表于 2015-2-25 19:47:47 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
只想知道 该用户已被删除
7#
发表于 2015-3-8 01:41:26 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
小魔女 该用户已被删除
8#
发表于 2015-3-12 04:35:54 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
再现理想 该用户已被删除
9#
发表于 2015-3-13 12:07:42 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
乐观 该用户已被删除
10#
发表于 2015-3-19 17:59:55 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
海妖 该用户已被删除
11#
发表于 2015-3-27 16:08:33 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
愤怒的大鸟 该用户已被删除
12#
发表于 2015-4-5 19:38:03 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
简单生活 该用户已被删除
13#
发表于 2015-4-6 03:10:37 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
若相依 该用户已被删除
14#
发表于 2015-4-6 05:07:36 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
冷月葬花魂 该用户已被删除
15#
发表于 2015-4-16 09:34:53 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
再见西城 该用户已被删除
16#
发表于 2015-4-16 19:28:15 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
不帅 该用户已被删除
17#
发表于 2015-4-25 02:10:33 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
兰色精灵 该用户已被删除
18#
发表于 2015-4-26 22:36:08 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
小女巫 该用户已被删除
19#
发表于 2015-4-27 04:59:15 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
山那边是海 该用户已被删除
20#
发表于 2015-5-1 17:09:27 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-12 23:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表