黑马程序员:都说正则表达式很难,那是因为他们没有看到这个贴.docx

上传人:公**** 文档编号:559452900 上传时间:2023-04-13 格式:DOCX 页数:11 大小:48.69KB
返回 下载 相关 举报
黑马程序员:都说正则表达式很难,那是因为他们没有看到这个贴.docx_第1页
第1页 / 共11页
黑马程序员:都说正则表达式很难,那是因为他们没有看到这个贴.docx_第2页
第2页 / 共11页
黑马程序员:都说正则表达式很难,那是因为他们没有看到这个贴.docx_第3页
第3页 / 共11页
黑马程序员:都说正则表达式很难,那是因为他们没有看到这个贴.docx_第4页
第4页 / 共11页
黑马程序员:都说正则表达式很难,那是因为他们没有看到这个贴.docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《黑马程序员:都说正则表达式很难,那是因为他们没有看到这个贴.docx》由会员分享,可在线阅读,更多相关《黑马程序员:都说正则表达式很难,那是因为他们没有看到这个贴.docx(11页珍藏版)》请在金锄头文库上搜索。

1、 都说正则表达式很难,那是因为他们没有看这个帖 在某个Linux网站上面有这样的话:如果你问一下Linux爱好者最喜欢什么,他可能会回答正则表达式;如果你问他最害怕什么,除了繁琐的安装配置外他肯定会说正则表达式。一、为什么PHP程序员要学习正则表达式?PHP被大量的应用于Web的后台CGI开发,通常是在用户数据数据之后得出某种结果,但是如果用户输入的数据不正确,就会出现问题,比如说某人的生日是2月30日!那应该怎么样来检验暑假是否正确呢? 在PHP中加入了正则表达式的支持,让我们可以十分方便的进行数据匹配。PHP中的正则表达式有着可以利用模式匹配找到符合条件的字符串、判断字符串是否合乎条件或者

2、用指定的字符串来替代符合条件的字符串等强大的功能,不学实在太可惜了 二、什么是正则表达式? 简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具。在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例如:Perl或PHP脚本语言。此外,JavaScript这种客户端的脚本语言也提供了对正则表达式的支持,现在正则表达式已经成为了一个通用的概念和工具,被各类技术人员所广泛使用。 三、PHP正则表达式的语法汇总和详细介绍 The: 匹配以 The开头的字符串;of despair$: 匹配以 of despair 结尾的字符串;abc$: 匹配以abc开头和以abc结尾的

3、字符串,实际上是只有abc与之匹配notice: 匹配包含notice的字符串 你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边这里还有几个字符 *, +,和 ?, 他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:zero or more, one or more, and zero or one. 这里是一些例子: ab*: 匹配字符串a和0个或者更多b组成的字符串(a, ab, abbb, etc.);ab+: 和上面一样,但最少有一个b (ab, abbb, etc.);ab?:匹配0

4、个或者一个b;a?b+$: 匹配以一个或者0个a再加上一个以上的b结尾的字符串. 你也可以在大括号里面限制字符出现的个数,比如 ab2: 匹配一个a后面跟两个b(一个也不能少)(abb;ab2,: 最少更两个b(abb, abbbb, etc.);ab3,5: 25个b(abbb, abbbb, or abbbbb. 你还要注意到你必须总是指定 (i.e, 0,2, not ,2.同样,你必须注意到, *, +, 和? 分别和一下三个范围标注是一样的,0, 1, 和 0,1。 现在把一定数量的字符放到小括号里,比如: a(bc)*: 匹配 a 后面跟0个或者一个bc;a(bc)1,5: 一个到

5、5个 bc. 还有一个字符 , 相当于OR 操作: hihello: 匹配含有hi 或者 hello 的 字符串;(bcd)ef: 匹配含有 bef 或者 cdef的字符串;(ab)*c: 匹配含有这样 - 多个(包括0个)a或b,后面跟一个c的字符串 的字符串; 一个点(.)可以代表所有的 单一字符: a.0-9: 一个a跟一个字符再跟一个数字的 (含有这样一个字符串的字符串将被匹配,以后省略此括号).3$: 以三个字符结尾 . 中括号括住的内容只匹配一个 单一的字符 ab: 匹配单个的 a 或者 b ( 和 ab 一样);a-d: 匹配a 到d的单个字符 (和abcd 还有 abcd效果一

6、样);a-zA-Z: 匹配以字母开头的字符串0-9%: 匹配含有 形如 x 的字符串,a-zA-Z0-9$: 匹配以逗号在加一个数字或字母结尾的字符串 你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用 作为开头 (i.e., %a-zA-Z% 匹配含有 两个百分号里面有一个非字母 的字符串). 好了,现在我们要用我们所学的来干一些有用的事:构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式: 10000.00 和 10,000.00,或者没有小数部分, 10000 and 10,000. 现在让我们开始构建这个匹配模式: 1

7、-90-9*$ 这是所变量必须以非0的数字开头.但这也意味着 单一的 0 也不能通过测试. 以下是解决的方法: (01-90-9*)$ 只有0和不以0开头的数字与之匹配,我们也可以允许一个负号再数字之前: (0-?1-90-9*)$ 这就是: 0 或者 一个以0开头可能有一个负号在前面的数字. 好了, 好了现在让我们别那么严谨,允许以0开头.现在让我们放弃 负号 , 因为我们在表示钱币的时候并不需要用到. 我们现在指定 模式 用来匹配小数部分: 0-9+(/.0-9+)?$ 这暗示匹配的字符串必须最少以一个阿拉伯数字开头. 但是注意,在上面模式中 10. 是不匹配的, 只有 10 和 10.2

8、 才可以. (你知道为什么吗) 0-9+(/.0-92)?$ 我们上面指定小数点后面必须有两位小数.如果你认为这样太苛刻,你可以改成: 0-9+(/.0-91,2)?$ 这将允许小数点后面有一到两个字符. 现在我们加上用来增加可读性的逗号(每隔三位), 我们可以这样表示: 0-91,3(,0-93)*(/.0-91,2)?$ 不要忘记加号 + 可以被乘号 * 替代如果你想允许空白字符串被输入话 (为什么?). 也不要忘记反斜杆 / 在php字符串中可能会出现错误 (很普遍的错误). 现在,我们已经可以确认字符串了, 我们现在把所有逗号都去掉 str_replace(, , $money) 然后

9、在把类型看成 double然后我们就可以通过他做数学计算了.构造检查email的正则表达式 好,让我们继续讨论怎么验证一个email地址. 在一个完整的email地址中有三个部分: POP3 用户名 (在 左边的一切), , 服务器名(就是剩下那部分). 用户名可以含有大小写字母阿拉伯数字,句号 (.), 减号(-), and 下划线 (_). 服务器名字也是符合这个规则,当然下划线除外. 现在, 用户名的开始和结束都不能是句点. 服务器也是这样. 还有你不能有两个连续的句点他们之间至少存在一个字符,好现在我们来看一下怎么为用户名写一个匹配模式: _a-zA-Z0-9-+$ 现在还不能允许句号

10、的存在. 我们把它加上: _a-zA-Z0-9-+(/._a-zA-Z0-9-+)*$ 上面的意思就是说: 以至少一个规范字符(除.意外)开头,后面跟着0个或者多个以点开始的字符串. 简单化一点, 我们可以用 eregi()取代 ereg().eregi()对大小写不敏感, 我们就不需要指定两个范围 a-z 和 A-Z 只需要指定一个就可以了: _a-z0-9-+(/._a-z0-9-+)*$ 后面的服务器名字也是一样,但要去掉下划线: a-z0-9-+(/.a-z0-9-+)*$ Done. 现在只需要用”把两部分连接: _a-z0-9-+(/._a-z0-9-+)*a-z0-9-+(/.a

11、-z0-9-+)*$ 这就是完整的email认证匹配模式了,只需要调用 eregi(_a-z0-9-+(/._a-z0-9-+)*a-z0-9-+(/.a-z0-9-+)*$ ,$eamil) 就可以得到是否为email了正则表达式的其他用法 1、提取字符串 ereg() and eregi() 有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册). 比如说,我们想从 path/URL 提取文件名 下面的代码就是你需要: ereg(/*)$, $pathOrUrl, $regs);echo $regs1; 2、高级的代换 ereg_replace() 和 eregi

12、_replace()也是非常有用的: 假如我们想把所有的间隔负号都替换成逗号: ereg_replace( /n/r/t+, , trim($str); 3 正则表达式的基本语法: 一个正则表达式,分为三个部分:分隔符,表达式和修饰符。 分隔符可以是除了特殊字符以外的任何字符(比如/ !等等),常用的分隔符是/。表达式由一些特殊字符(特殊字符详见下面)和非特殊的字符串组成,比如a-z0-9_-+a-z0-9_-.+可以匹配一个简单的电子邮件字符串。修饰符是用来开启或者关闭某种功能/模式。下面就是一个完整的正则表达式的例子: /hello.+?hello/is 上面的正则表达式/就是分隔符,两个

13、/之间的就是表达式,第二个/后面的字符串is就是修饰符。 在表达式中如果含有分隔符,那么就需要使用转义符号/,比如/hello.+?/hello/is。转义符号除了用于分隔符外还可以执行特殊字符,全部由字母构成的特殊字符都需要/来转义,比如/d代表全体数字。 4 正则表达式的特殊字符: 正则表达式中的特殊字符分为元字符、定位字符等等。 元字符是正则表达式中一类有特殊意义的字符,用来描述其前导字符(即元字符前面的字符)在被匹配的对象中出现的方式。元字符本身是一个个单一的字符,但是不同或者相同的元字符组合起来可以构成大的元字符。 元字符: 大括号:大括号用来精确指定匹配元字符出现的次数,例如/pre1,5/表示匹配的对象可以是pre、pree、preeeee这样在pr后面出现1个到5个e的字符串。或者/pre,5/代表pre出现0此到5次之间。 加号:+字符用来匹配元字符前的字符出现一次或者多次。例如/ac+/表示被匹配的对象可以是act、account、acccc等在a后面出现一个或者多个c的字符串。+相当于1,。 星号:*字符用来匹配元字符前的字符出现零次或者多次。例如/ac*/表示被匹配的对象可以是app、acp、accp等在a后面出现零个或者多个c的字符串。*相当于0,。 问号:?字符用来匹配元字符前的字符出现零次或者1次。例如/ac?/表示匹配的对象可以是

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号