PHP正则表达式常用字符簇

在internet编程应用的时候,常常需要检查一个字符串是否"合法",这样的例子如qq必须是由数字组成,email的格式要正确,实现这样的验证,如果对每一个字符都进行检查,或者将每个字符和分隔符全部写出组成一个正则表达式,显然不是一个好办法。PHP提供了一种比较方便的定义一个字符集合的办法,这种集合,一般就称为字符簇,一般是用方括号[ ]把字符簇括起来.

首先,我们从最简单的例子开始。
[abde]
这个含有方括号的表达式就定义了一个字符簇,同时也是一个正则表达式。它的意思是,只要有一个字符串含有字符a,b,d,e中的任何一个,这个字符串就是匹配字符簇[abde]的。下面是一个例子
<?php
$str1="abmkaq2334fl";//字符串1
$str2="cffghki9-0";//字符串2
if(ereg("[abde]","$str1")){
   echo"$str1 匹配 [abde]<br>";
}
else{
   echo"$str1 不匹配 [abde]<br>";
}
if(ereg("[abde]","$str2")){
   echo"$str2 匹配 [abde]";
}
else{
   echo"$str2 不匹配 [abde]";
}
?>

我们得到的结果将是:
abmkaq2334fl 匹配 [abde]
cffghki9-0 不匹配 [abde]

下面给出一些常用的字符簇
[a-z]      匹配从a-z的字母,即匹配所有的小写字母
[A-Z]     匹配从A-Z的字母,即匹配所有的大写字母
因此
[a-zA-Z]  就是匹配所有的字母
这里只举一个简单的[a-z]的例子
<?php
$str1="abq2334fl";//字符串1
$str2="cffghki9-0";//字符串2
$pattern="[a-z]{5,}";//匹配模式
//判断是否含有连续的5个小写字母
if(ereg("$pattern","$str1")){
   echo"$str1 匹配 $pattern<br>";
}
else{
   echo"$str1 不匹配 $pattern<br>";
}
if(ereg("$pattern","$str2")){
   echo"$str2 匹配 $pattern";
}
else{
   echo"$str2 不匹配 $pattern";
}
?>
我们得到的结果将是
abq2334fl 不匹配 [a-z]{5,}
cffghki9-0 匹配 [a-z]{5,}

同样的,[0-9]  的意思是匹配所有的数字
<?php
$str1="abq2334fl";//字符串1
$pattern="[0-9]{5,}";//匹配模式
//判断是否含有连续的5个数字
if(ereg("$pattern","$str1")){
   echo"$str1 匹配 $pattern<br>";
}
else{
   echo"$str1 不匹配 $pattern<br>";
}
?>
得到的结果将是
abq2334fl 不匹配 [0-9]{5,}

另外,[ntrf]  匹配所有的空字符,包括换行符,tab,回车符(不含空格)
在方括号表达式内,使用字符"^"开头表示取非,即若含有其后的字符,则是不匹配的,否则是匹配的.
[^a-z]  匹配所有非小写字母
[^A-Z],[^0-9]  意思是一样的,匹配所有非大写字母,匹配所有非数字字符.
<?php
$str1="af";//字符串1
$pattern="[^a-z]";//匹配模式
//判断是否含有连续的5个小写字母
if(ereg("$pattern","$str1")){
   echo"$str1 匹配 $pattern<br>";
}
else{
   echo"$str1 不匹配 $pattern<br>";
}
?>
结果将是:
af 不匹配 [^a-z]
但是,字符串"afs555^^_",将是匹配的,因为其中含有了非小写字符

这里需要注意的是,^在[ ]里面和外面的作用是不一样的. ^[a-f]是指以a-f等六个字母中的一个开头的字符串匹配模式, [^a-f]则是匹配字符串中不是a-f等六个字母中的字符,也有这样的正则表达式^[^a-f] ,如果一个字符串不是以a-f开头的字符串,那么将是匹配的.

另外,特殊字符".",匹配除了新行之外的所有字符(.+)可以匹配除了空字符串和含一个新行字符的任何字符串.

除了上述的字符簇外,PHP还提供了一些内置的通用字符簇:
[[:alpha:]]    任何字母
[[:digit:]]       任何数字
[[:alnum:]]   任何数字和字母
[[:space:]    任何空白字符
[[:upper:]]     任何大字字母
[[:lower:]]      任何小写字母
[[:punct:]]       任何标点符号
[[:xdigit:]]       任何十六进制的数字
[[:cntrl:]]         任何ASCII值小于32的字符

特别地,[".chr(0xa1)."-".chr(0xff)."]匹配所有的汉字,下面是一个例子
<?php
$str = "伊风网络phplover";
if (ereg("^[".chr(0xa1)."-".chr(0xff)."]+$", $str)){
echo "这是一个纯中文字符串";
}
else
{
echo "这不是一个纯中文字串";
}
?>

$str的值换成"伊风网络",得到的结果将是
这是一个纯中文字符串

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值