正则表达式语法规则都有哪些?
一个正常的PHP正则表达式由元字符和文本字符这两部分构成,元字符就是具有特殊含义的字符,如前面提到的“*”和“?”。文本字符就是普通的文本,如字母和数字等。 PCRE风格的正则表达式一般都旋转在定界符 “/” 中间。如“/\w+([-+.']\w+)*@\w+/”([-.']\w+)*\.\w*\.\w+([-.']\w+)*/“、”/^http:\/\/(www\.)?.+.?$/“。为了便于读者理解,除了个别实例外,本节中的表达式不给出定界符”/“。
php正则:行定位符(^和$)说明
行定位符就是用来描述字符串的边界。”^“表示行的开始;”$“表示行的结尾。如:
^tm
该表达式匹配字串”tm“的开始位置是行头,如”tm equal Tomorrow Moon“就可以匹配,而”Tomorrow Moon equal tm“则不匹配。但如果使用:
tm$
则后者可以匹配而前者不能匹配。如果要匹配的字串可以出现 在字符串的任意部分,那么可以直接 写成:
tm
这样两个字符串就都可以匹配了。
php正则:单词定界符(\b和\B)说明
继续上面的实例,使用 tm 可以匹配在字符串中出现 的任何位置。那么类似 html、utmost 中的 tm 也会被查找出来。但现在需要匹配的是单词 tm ,而不是单词的一部分。这里可以使用单词定界符 \b ,表示要查找的字串为一个完整的单词。如:
\btm\b
还有一个大写的 \B ,意思和 \b 相反。它匹配的字串不能是一个完整的单词,而是其它单词或字串的一部分。如:
\Btm\B
php正则:字符类(^和$)说明
正则表达式是区分大小写的,如果要忽略大小写可使用方括号表达式”[]“。只要匹配的字符出现在方括号内,即可表示匹配成功。但要注意,一个方括号只能匹配一个字符。登台,要匹配的字串 ”tm“ 不区分大小写,那么该表达式应该写作如下格式:
[Tt][Mm]
这样,即可匹配字串 ”tm“ 的所有写法。POSIX 和 PCRE 都使用了一些预定义符类。但表示方法略有不同。POSIX 风格的预定义字符类如表 6.1 所示。

而PCRE的预定义符类则使用反斜线来表示。
php正则:选择字符(|)说明
还有种方法可以实现上面字符类的匹配模式,就是使用选择字符(|)。该字符可以理解为”或“,如上例也可以写成:
TM|tm|Tm|tM
php正则:连字符(-)说明
变量的命名规则是只能以字母和下划线开头。但这样一来,如果要使用正则表达式来匹配变量名的第一个字母,要写为:
[a,b,c,d...A,B,C,D...]
这无疑是非常麻烦的,正则表达式提供了连字符”-“来解决这个问题。连字符可以表示字符的范围。如例可以写成:
[a-zA-Z]
php正则:排除字符([^])说明
上面的例子是匹配符合命名规则变量。现在反过来,匹配不符合命名规则的变量,正则表达式提供了 ”^“ 字符,表示行的开始,而这里将 ”^“ 放到方括号中,表示排除的意思。例如:
[^a-zA-Z]
该表达式匹配的就是不以字母和下划线开头的变量名。
php正则:限定字符(?*+{n,m})说明
经常使用 google 的用户可能会发现,在搜索结果页的下方, google 中间字母 o 的个数会随着搜索页的改变而改变。那么要匹配字串的正则表达式该如何实现呢?
对于这类重复出现字母或字串,可以使用限定符来匹配。限定符主要有6种,如下图所示:
可以发现,在上图中,实际已经对字符串进行了匹配,只是还不完善。通过观察发现,当google搜索结果只有一页时,不显示google标志,只有大于等于2时,才显示google。说明字母O最少为两个,最多为20个,那么正则表达式为:
go(2,20)gle
php正则:点号字符(.)说明
如遇到这样的试题:写出5~10个以s开头、t 结尾的单词,这是有很大难度的,如果考题并不告知第一个字母,而是中间任意一个,无疑难度会更大。
在正则表达式中可以通过点字符(.)来实现这样的匹配。点字符(.)可以匹配出换行符外的任意一个字符。注意,是除了换行符外的。如匹配 s 开头、 t 结尾、中间包含一个字母的单词。格式如下:
^s.t$
匹配的单词包括:sat\sct\sit等。再举一个实例,匹配一个单词,它的第一个字母为r,第3个字母为s,最后一个字母为t。能匹配该单词的正则表达式为:
^r.s.*t$
php正则:转义字符(\)说明
正则表达式中的转义字符(\)和PHP中的大同小异,都是将特殊的字符(如“.”,“?”,“\”等)变为普通字符。举一个IP地址的实例,用正则表达式匹配诸如 127.0.0.1 这样格式的IP地址。如果直接使用点字符,格式为:
[0-9]{1,3}(\.[0-9]{1,3}){3}
其它php正则元字符
除了以上还有以下元字符,如:反斜线(\)、括号字符(())、反向引用、模式修饰符等