PHP之正则表达式入门

正则表达式(英文:Regular expression_r)在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。许多程序设计语言都支持利用正则表达式进行字符串操作,包括查找符合某些复杂规则的字符串。正则表达式提供了一种高级的,但不直观的字符串匹配和处理的方法,其功能非常强大。在web应用的逻辑判断中具有比较重要的作用。譬如验证邮箱地址的正确性、搜索特定字符串等常见应用。

既然这是一种表达式,当然它们需要具备一定的规则,这样人们才能按照统一的标准去查找去使用它们。下面我们从最基本的规则来说起,跟数学里加减乘除括号等的用法类似。我们入门先从模式和字符簇学起。

一、模式

一切从最基本的开始,就像数学先学数字一样,我们先看基本模式匹配。模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成(就像1就是1,2就是2),也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文(譬如输入法里面*可以代表任意字母一样)。

我们一个个的看:

1、前匹配:^
如^one与字符串"one man"匹配,与"There is one man"不匹配。也就是说该模式只匹配那些以one开头的字符串。

2、后匹配:$
跟^类似,$符号用来匹配那些以给定模式结尾的字符串。
如bucket$与"Who kept all of this cash in a bucket"匹配,与"buckets"不匹配。                                                  


3、精确匹配:^+$
字符^和$同时使用时,表示精确匹配(仅匹配^和$中间的字符)。如:^one$与"ones"和"loveone"等都不匹配。

4、任意匹配:不使用^、$等特殊字符
如果一个模式不包括^和$,那么它与任何包含该模式的字符串匹配。如:once,只有给定的语句中含有once,就与之匹配。


上面的模式中的字母(o-n-e)表示的是该字母或者数字本身,但是对于其他一些稍微复杂的字符,如标点符号和白字符(空格、制表符等)如何匹配呢?继续看^_^

5、特殊字符的匹配:需要用到转义序列
所有的转义序列都用反斜杠(/)打头。如制表符的转义序列是:/t。所以如果我们要检测一个字符串是否以制表符开头,可以用这个模式:^/t

类似的,/n表示新行,/r表示回车等等。其他转义字符大家可以自行查阅资料。

 

二、字符簇:使用[]

在很多程序中,正规表达式通常用来验证用户的输入。例如判断电话号码、地址、EMAIL地址、信用卡号码等是否有效,用普通的基于模式的字符是不够的。所以要用一种更自由的描述我们要的模式的办法,它就是字符簇。

使用字符簇之前需要明白待验证输入的特点,譬如电话号码是全数字的,是否带有区号或者分机号等等不同的情况。

1、如果我们要匹配所有数字,我们可以使用[0123456789],当然[]合起来只是代表一个字符,譬如^[0123456789]$就只是匹配所有的一位数数字了。当然,我们可以简单的使用连字号“-”表示一个字符的范围,如:
[0-9]:可以代替[0123456789]匹配所有的数字
[a-z]:匹配所有的小写字母
[A-Z]:匹配所有的大写字母
[a-zA-Z]:匹配所有的字母
[0-9/./-]:匹配所有的数字、句号和减号
[ /f/r/t/n]:匹配所有的白字符

需要注意的是,这些都只表示一个字符,这是一个非常重要的。如果要匹配2位数字,可以使用^[0-9][0-9]$


2、前面曾经提到^表示匹配字符串的开头,但它还有另外一个含义。当在一组方括号里使用^是,它表示“非”或“排除”的意思,常常用来剔除某个字符。如匹配非数字使用[^0-9]。下面是几个排除特定字符的例子:
[^a-z]:匹配除了小写字母以外的所有字符
[^/^]:匹配除了(/)(/)(^)之外的所有字符
[^/"/']:匹配除了双引号(")和单引号(')之外的所有字符


3、特殊字符"." (点,句号)在正规表达式中用来表示除了“新行”之外的所有字符。所以模式^.5$与任何两个字符的、以数字5结尾和以其他非“新行”字符开头的字符串匹配。

4、PHP的正规表达式有一些内置的通用字符簇,大家可以作为了解,列表如下:
[[:alpha:]] 任何字母
[[:digit:]] 任何数字
[[:alnum:]] 任何字母和数字
[[:space:]] 任何白字符
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母
[[:punct:]] 任何标点符号
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]


最后给大家一个可以测试是否匹配的PHP语句,非常简单,用if语句即可,代码如下:
<?php
$a="待验证的输入";
if(ereg("匹配的模式",$a)){
 echo "匹配";
}else{
 echo "不匹配";
}
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值