PHP正则表达式

一、概述

正则表达式是进行模式匹配和文本操纵的一种复杂而强大的工具。在PHP中可以方便的利用这些匹配规则检验、替换及过滤字符串。在PHP手册“Perl兼容正则表达式函数”章节,可以了解PCRE的一些基础知识,以及如何使用preg_match(),preg_replace(),preg_split()等函数。

正则表达式通过其简单的语法构造模式,能够匹配几乎任何可以想象出来的字符组合。但正是因为这种简洁,匹配字符组合在一起后也让人头晕。因此,记住一些关键匹配字符的含义就显得尤为重要。只有记住这些才能将一连串的匹配字符拆分成段的理解。

邮箱验证的正则表达式:
<?php
$email = "your.name@domain.name.info";
if (! preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $email)) {
    echo 'Email is invalid.';
}
?>

定界符/
在PCRE中,斜杠为界定符。

元字符
有两组不同的元字符:一种是模式中除了方括号内都能被识别的,还有一种是在方括号内被识别的。
方括号外的元字符:反斜线\、音调符^、美元符$、句点.、方括号[]、竖线|、圆括号()、问号?、星号*、加好+、花括号{}。
模式中方括号内的部分称为“字符类”,其内的元字符为:反斜线\、音调符^、中横线-。

二、具体含义:
音调符^和美元符$
音调符:在字符类之外,默认匹配模式下仅在当前匹配点是目标字符串的开头时才为真的断言。在字符类之中,音调符的含义完全不同,为指出字符范围。
美元符:仅在当前匹配点是目标字符串的结尾或者当最后一个字符是换行符时其前面的位置时为TRUE的断言(默认情况下)。如果涉及到几选一时美元符不需要是模式的最后一个字符,但应该是其出现的分支中的最后一个字符。美元符在字符类之中没有特殊含义。

反斜线\
反斜线是有数种用途的通用转义符,常用的有:
1、将某些元字符当普通字符用——如:( ) [ ] . * ? + ^ | $
2、指定通用字符类型:\d 任一十进制数字;\D 任一非十进制数的字符。
其用法还有表示二进制、某些简单的断言等,详细可以参考手册。

四个常用元字符的含义
句点(.): 匹配任意字符。因此,模式.at匹配cat、bat或rat等。
星号(*): 匹配0或多个前面的对象。迄今为止,我们知道的唯一对象就是字符。
加号(+): 和星号的含义类似,但是它指匹配1或多个前面的对象。因此,.+at匹配brat、sprat甚至catestrophe中的cat,但不匹配at。如果要匹配at,必须将+换成*。
问号(?): 前面的对象是可选的。也就是说,它匹配0或1个前面的对象,模式color?既匹配color也匹配colour。模式color?表示,问号前面的r字符出现0或1次。
如果想让元字符直接与自身匹配,需要在元字符前加上反斜杠。

字符类[]
如果想用一组特殊的字符匹配字符,可以通过将这些字符放到方括号中来创建一个字符类。
方括号中可用的元字符有:
\ 通用转义字符
^ 排除字符类,但仅当其为第一个字符时有效。
- 指出字符范围

竖线|
竖线符号也称为管道(pipe),用于分隔多选一的模式。
如:gilbert|sullivan,匹配了"gilbert"或者"sullivan"中的一个。可以有任意多个分支,也可以有空的分支(匹配空字符串)。

子模式()
如果想对多个字符用*或+等,需要把相应的字符序列放在一个圆括号中构成对象。
如:cat(aract|erpillar|)
匹配了"cat","cataract"或"caterpillar"之一,没有圆括号的话将匹配"cataract","erpillar"或空字符串。

重复{}
重复是由数量符指定的,可以接以下任何一项:
1、单个字符,可以是被转义的; 2、.匹配字符; 3、一类字符; 4、一个反向引用; 5、一个括号中的子模式(除非是个断言)


普通的重复数量符指定了所允许的匹配的最小和最大数目,方法是将两个数字放在花括号中,中间用逗号分隔。数字必须小于 65536,并且第一个数字必须小于或等于第二个数字。例如:z{2,4} 匹配了 "zz","zzz" 或 "zzzz"。单个的右花括号不算是特殊字符。如果省略了第二个数字但是有逗号,则表示没有上限。如果同时省略了第二个数字和逗号,则数量符指定了匹配的准确数目。因此 [aeiou]{3,} 匹配至少连续 3 个元音,但是可以匹配更多。\d{8} 则匹配了正好 8 个数字。出现在不允许放置数量符位置或者不符合数量符语法的左花括号,被当成字面上的该字符。例如 {,6} 不是一个数量符,而是字面上的这四个字符。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值