半小时懂php正则表达式

上传人:wm****3 文档编号:47034236 上传时间:2018-06-29 格式:PDF 页数:9 大小:189.72KB
返回 下载 相关 举报
半小时懂php正则表达式_第1页
第1页 / 共9页
半小时懂php正则表达式_第2页
第2页 / 共9页
半小时懂php正则表达式_第3页
第3页 / 共9页
半小时懂php正则表达式_第4页
第4页 / 共9页
半小时懂php正则表达式_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《半小时懂php正则表达式》由会员分享,可在线阅读,更多相关《半小时懂php正则表达式(9页珍藏版)》请在金锄头文库上搜索。

1、简单的说, 正则表达式是一种可以用于模式匹配和替换的强有力的工具。 我们可以在几乎所 有的基于 UNIX 系统的工具中找到正则表达式的身影,例如,vi 编辑 器,Perl 或 PHP 脚本语 言,以及 awk 或 sed shell 程序等。此外,象 javascript 这种客户端的脚本语言也提供了对正 则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的 局限,成为人 们广为接受的概念和功能。 正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式, 然后把匹配模式与数 据文件、程序输入以及 WEB 页面的表单输入等目标对象进行比较,根据比较对象中是否包 含匹配模式,执行相

2、应的程序。 举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址 的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所 填写的表单 信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出 提示信息,要求用户重新输入正确的邮件地址。由此可见正则 表达式在 WEB 应用的逻辑判 断中具有举足轻重的作用。 2、基本语法 在对正则表达式的功能和作用有了初步的了解之后, 我们就来具体看一下正则表达式的 语法格式。 正则表达式的形式一般如下: /love/ 其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希 望查找

3、匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户 更加灵活的定制模式 内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊 意义的专用字符,可以用来规定其前导字符(即位 于元字符前面的字符)在目标对象中的 出现模式。 较为常用的元字符包括: “+”, “*”,以及 “?”。其中,“+”元字符规定其前导字符必须 在目标对象中连续出现一次或多次,“*”元字符规定其前导字符必须在目标对象中出现零次 或连续多次,而 “?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。 下面,就让我们来看一下正则表达式元字符的具体应用。 /fo+/ 因为上述正则表达式中

4、包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母 f 后面连续出现一个或多个字母 o 的字符串相匹配。 /eg*/ 因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母 e 后面连续出现零个或多个字母 g 的字符串相匹配。 /Wil?/ 因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者 “Wilson”,等在字母 i 后面连续出现零个或一个字母 l 的字符串相匹配。 除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如, /jim

5、2,6/ 上述正则表达式规定字符 m 可以在匹配对象中连续出现 2-6 次,因此,上述正则表达 式可以同 jimmy 或 jimmmmmy 等字符串相匹配。 在对如何使用正则表达式有了初步了解之后, 我们来看一下其它几个重要的元字符的使 用方式。 s:用于匹配单个空格符,包括 tab 键和换行符; S:用于匹配除单个空格符之外的所有字符; d:用于匹配从 0 到 9 的数字; w:用于匹配字母,数字或下划线字符; W:用于匹配所有与w 不匹配的字符; . :用于匹配除换行符之外的所有字符。 (说明:我们可以把s 和S 以及w 和W 看作互为逆运算) 下面,我们就通过实例看一下如何在正则表达式中

6、使用上述元字符。 /s+/ 上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。 /d000/ 如果我们手中有一份复杂的财务报表, 那么我们可以通过上述正则表达式轻而易举的查 找到所有总额达千元的款项。 除了我们以上所介绍的元字符之外, 正则表达式中还具有另外一种较为独特的专用字符, 即定位符。定位符用于规定匹配模式在目标对象中的出现位置。 较为常用的定位符包括: “”, “$”, “b” 以及 “B”。其中,“”定位符规定匹配模式必 须出现在目标字符串的开头,“$”定位符规定匹配模式必须出现在目标对象的结尾,b 定位 符规定匹配模式必须 出现在目标字符串的开头或结尾的两个边界之一,而“

7、B”定位符则规 定匹配对象必须位于目标字符串的开头和结尾两个边界之内, 即匹配对象既不能作为目标字 符串的开头,也不能作为目标字符串的结尾。同样,我们也可以把“”和“$”以及“b”和“B” 看作是互为逆运算的两组定位符。举例来说: /hell/ 因为上述正则表达式中包含“”定位符,所以可以与目标对象中以 “hell”, “hello”或 “hellhound”开头的字符串相匹配。 /ar$/ 因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。 /bbom/ 因为上述正则表达式模式以“b”定位符开头,所以可以与目标对象中以 “

8、bomb”, 或 “bom”开头的字符串相匹配。 /manb/ 因为上述正则表达式模式以“b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。 为了能够方便用户更加灵活的设定匹配模式, 正则表达式允许使用者在匹配模式中指定 某一个范围而不局限于具体的字符。例如: /A-Z/ 上述正则表达式将会与从 A 到 Z 范围内任何一个大写字母相匹配。 /a-z/ 上述正则表达式将会与从 a 到 z 范围内任何一个小写字母相匹配。 /0-9/ 上述正则表达式将会与从 0 到 9 范围内任何一个数字相匹配。 /(a-zA-Z0-9)+/ 上述正则表达式将

9、会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。这里需 要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。 “()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符 串匹配,因为“abc”中的最后一个字符为字母而非数字。 如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算, 在多个不同的模式中任 选一个进行匹配的话,可以使用管道符 “|”。例如: /to|too|2/ 上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。 正则表达式中还有一个较为常用的运算符,即否定符 “”。与

10、我们前文所介绍的定位 符 “” 不同,否定符 “”规定目标对象中不能存在模式中所规定的字符串。例如: /A-C/ 上述字符串将会与目标对象中除 A,B,和 C 之外的任何字符相匹配。一般来说,当“” 出现在 “”内时就被视做否定运算符;而当“”位于“”之外,或没有“”时,则应当被视做 定位符。 最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用 转义符“”。例如: /Th*/ 上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。 3、使用实例 PHP 中可以使用 ereg()函数进行模式匹配操作。ereg()函数的使用格式如下: ereg(pattern

11、, string) 其中,pattern 代表正则表达式的模式,而 string 则是执行查找替换操作的目标对象。同 样是验证邮件地址,使用 PHP 编写的程序代码如下: javascript 1.2 中带有一个功能强大的 RegExp()对象,可以用来进行正则表达式的匹配 操作。 其中的 test()方法可以检验目标对象中是否包含匹配模式, 并相应的返回 true 或 false。 我们可以使用 javascript 编写以下脚本,验证用户输入的邮件地址的有效性。 想必很多人都对正则表达式都头疼。今天,我以我的认识,加上网上一些文章,希望用常人 都可以理解的表达方式。来和大家分享学习经验。

12、开篇,还是得说说 和 $ 他们是分别用来匹配字符串的开始和结束,以下分别举例说明: “The“:开头一定要有“The“字符串; “of despair$“:结尾一定要有“of despair“ 的字符串; 那么, “abc$“:就是要求以 abc 开头和以 abc 结尾的字符串,实际上是只有 abc 匹配; “notice“:匹配包含 notice 的字符串; 你可以看见如果你没有用我们提到的两个字符 (最后一个例子) , 就是说模式 (正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边。 接着,说说 * + 和 ? 他们用来表示一个字符可以出现的次数或者顺序,他们分别表示:

13、 “zero or more“相当于0, “one or more“相当于1, “zero or one.“相当于0,1 这里是一些例子: “ab*“:和 ab0,同义,匹配以 a 开头,后面可以接 0 个或者 N 个 b 组成的字符串(“a“, “ab“, “abbb“, 等); “ab+“:和 ab1,同义,同上条一样,但最少要有一个 b 存在 (“ab“ “abbb“等); “ab?“:和 ab0,1同义,可以没有或者只有一个 b; “a?b+$“:匹配以一个或者 0 个 a 再加上一个以上的 b 结尾的字符串。 要点:* + 和 ? 只管它前面那个字符。 你也可以在大括号里面限制字符出

14、现的个数,比如: “ab2“: 要求 a 后面一定要跟两个 b(一个也不能少)(“abb“); “ab2,“: 要求 a 后面一定要有两个或者两个以上 b(如“abb“ “abbbb“ 等); “ab3,5“: 要求 a 后面可以有 25 个 b(“abbb“, “abbbb“, or “abbbbb“)。 现在我们把一定几个字符放到小括号里,比如: “a(bc)*“: 匹配 a 后面跟 0 个或者一个“bc“; “a(bc)1,5“: 一个到 5 个 “bc“; 还有一个字符 |,相当于 OR 操作: “hi|hello“: 匹配含有“hi“ 或者 “hello“ 的 字符串; “(b|cd

15、)ef“: 匹配含有 “bef“ 或者 “cdef“的字符串; “(a|b)*c“: 匹配含有这样多个(包括 0 个)a 或 b,后面跟一个 c 的字符串; 一个点(.)可以代表所有的单一字符,不包括“n“ 如果,要匹配包括“n“在内的所有单个字符,怎么办? 用n.这种模式。 “a.0-9“: 一个 a 加一个字符再加一个 0 到 9 的数字; “.3$“: 三个任意字符结尾。 中括号括住的内容只匹配一个单一的字符 “ab“: 匹配单个的 a 或者 b ( 和 “ab“ 一样); “a-d“: 匹配a 到d的单个字符 (和“abcd“ 还有 “abcd“效果一样); 一般我们都用a-zA-Z来指定字符为一个大小写英文: “a-zA-Z“: 匹配以大小写字母开头的字符串; “0-9%“: 匹配含有 形如 x 的字符串; “,a-zA-Z0-9$“: 匹配以逗号再加一个数字或字母结尾的字符串; 你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用 作为开头 “%a-zA-Z%“ 匹配含有两个百分号里面有一个非字母的字符串。 要点:用在中括号开头的时候,就表示排除括

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

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