主要内容
- 基础
- PHP中的正则表达式函数
- 常用的正则表达式
基础
不用多讲,正则表达式(以下简称正则)是处理字符串的一种工具,它可以帮助你从字符串中提取你想要的内容,也可以用来验证某个字符串是否合法。几乎每种编程语言都提供了对正则的支持。有两种正则表达式的版本:POSIX和PERL,这两种版本在语法和效率上有一些差别。下面我们以PERL版本为例(据说效率比POSIX更高),PHP中提供了以preg_开头的函数来支持PERL版本的正则。
我把正则表达式的语法分类为元素、元素的个数、容器、逻辑或、特殊字符的转义五个部分。中文课本上那些怪怪的名字让我很反感,这样分让我感觉比较舒服,至少目前是这样。
元素:正则中的最小单位,可以是一个具体的字符,也可以是代表某一类的特殊字符。
- a-zA-Z0-9 :纯字符
- . :任何字符(除了换行符)
- [] :有时候,你想让一个“位置”,代表某一类字符,就可以用[],里面写上,你可能出现的字符,如:[abc],表示这个“位置”可以是a、b、c中的任何一个。同时也支持范围,如:[a-z]表示a到z中的任何一个字母,复杂点:[a-zA-Z0-9],你懂得。另外如果在括号的开头加上“^”表示匹配除了括号里的字符,如c[^ab]t,将匹配cmt,cot,而不会匹配cat,cbt。
容器:元素的集合,它本身也是一个元素,专业点叫“复合”。其实,我这里说是中括号“()”,这个在正则里是个神奇的东西,它不仅是一个容器,而且会把容器里的东西记下来,这样后面就可以用到。
元素的个数:上面说得“元素”符号,只代表一个位置。现在如果让你匹配3个a,你可以把正则写为:“aaa”,那如果是100个a呢,你不会愿意写100个a的。另外,如果想匹配100个数字,怎么办呢?下面的“元素的个数”符号会解决这个问题。
- * :0个或者多个元素
- + :1个或者多个元素
- ? :0个或者1个元素
- {} :大括号,比上面的覆盖范围更广,比如:{0,}表示0个或者多个(同*);{1,}表示1个或者多个(同+);{0,1}表示0个或者1个(同?);{1,100}表示1到100个。
逻辑或:符号”|“。不用说你应该明白,它表示的是多个中任选一个。
特殊字符的转义:在上面做了特殊用途的字符,如果你想匹配这些特殊字符,只需要在前面加上反斜杠(),转移即可。如:$、?。
参考
http://www.phpfreaks.com/tutorial/regular-expressions-part1---basic-syntax