首 页   · 站长博客 · 用户注册 · 会员登陆  · 会员排行  ·最新主题  ·最近回复  精华区  版权声明  ·论坛管理
  当前登录身份:游客,请先登录。  笔名: 口令: 验证码:   
楼 主  index »  PHP安装/语法/函数 » [站长新作]几个比较有趣的字符串处理正则表达式  


  作者:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

  nqp@nqp.me
  4304410
  www.nqp.me

 

 发表:2004-04-20 17:58:42 阅读 3433 次 回复 6 次 得分4  |   字号 字色
[站长新作]几个比较有趣的字符串处理正则表达式
  今天研究PHP文档,发现几个很有意思的字符串处理相关的正则表达时,有些估计对大家有用,就总结几个比较常用的。

  ereg: 字符串比对解析。  
  split: 将字符串依指定的规则切开。 

 下面逐个介绍:

  1、 ereg 字符串比对解析。

  语法: int ereg(string pattern, string string, array [regs]);
  返回值: 整数/数组
  说明:
   本函数以 pattern 的规则来解析比对字符串 string。比对结果返回的值放在数组参数 regs 之中,regs[0] 内容就是原字符串 string、regs[1] 为第一个合乎规则的字符串、regs[2] 就是第二个合乎规则的字符串,余类推。若省略参数 regs,则只是单纯地比对,找到则返回值为 true。
  使用范例 
   这个例子是 markus@dnet.it 在 14-Jun-1999 所提出的,可对使用者输入的 E-Mail 作简单的检查,检查使用者的 E-Mail 字符串是否有 @ 字符,在 @ 字符前有英文字母或数字,在之后有数节字符串,最后的小数点后只能有二个或三个英文字母。super@mail.wilson.gs 就可以通过检查,super@mail.wilson 就不能通过检查。
  <?php
   if (eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email)) {
  echo "您的 E-Mail 通过初步检查";
}
?> 

  2、split 将字符串依指定的规则切开。
   语法: array split(string pattern, string string, int [limit]);
   返回值: 数组 
   内容说明 
    本函数可将字符串依指定的规则分开。切开后的返回值为数组变量。参数 pattern 为指定的规则字符串、参数 string 则为待处理的字符串、参数 limit 可省略,表示欲处理的最多合乎值。值得注意的是本函数的 pattern 参数有区分大小写。

   使用范例:
 本范例是一起PHP站长2004年4月20日创建的。目的是演示split地用法:
  <?php
$aa="asdfasd23asdfasdf23lj;jk23kl;j;;jk23lk;j";
$kk="23";
$tt=split($kk,$aa);

for($i=1;$i<=count($tt);$i++){
echo $tt[$i]."<br>";
}
?>
    本范例经过调试,输出结果如下:
 asdfasdf
 lj;jk
 kl;j;;jk
 lk;j

   以上是两个比较有趣的字符串处理相关的正则表达式的用法。当然,范例中的函数可以自己编写,完全可以成功。不过,采用系统函数在多数情况下要比自己编写的函数效率高一些。所以,建议学习PHP的朋友关注。

 
 1#楼  
 
  回复人:INP
  注册时间:2004-04-05
  主题/回复:12/38
  积分:516
  等级:★★☆(五级)
  称号:略有小成

用户联系方式已设置为保密
 1#楼 发表于2004-04-28 06:42:51  评分:1 

站长新作,予以支持。
不过站长介绍的第二个函数split,的确好用,如果把例子中的$tt数组全部输出的话,变量$i需要从0开始,这是我们容易忽略的一个地方吧。如果从0开始的话,上面例子的输出应该是5行,因为4个$kk“23”,而别它分割开的字符串$aa应该被分为5部分·$aa[],是从0开始的。
 2#楼  
 
  回复人:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

   
 2#楼 发表于2004-04-28 17:26:16  评分:× 

呵呵,inp说得很对,当然要从0开始。我的语句是没有问题的
for($i=1;$i<=count($tt);$i++){

我这个,虽然$i从1开始,但是我选择了$i<=count($tt),而不是$i<count($tt),所以,上面的代码是没有问题的,可以全部输出数组的内容
 3#楼  
 
  回复人:cossboy
  注册时间:2004-05-03
  主题/回复:0/1
  积分:401
  等级:★★☆(五级)
  称号:略有小成

   
 3#楼 发表于2004-05-03 05:45:33  评分:1 

不懂~
 4#楼  
 
  回复人:Miyahoo
  注册时间:2004-04-04
  主题/回复:39/255
  积分:1210
  等级:★★★☆(七级)
  称号:论坛贤士

   
 4#楼 发表于2004-05-05 07:16:42  评分:1 

哈哈~ 就是强词夺理!你这个就是一个不足之处!起码是你编程思维的不严谨~

就算这样得到的结果是对的。也是一种不好的习惯~在用数组的时候,就应该用0开始~

我们要把这个当成一项硬性的规定~
 5#楼  
 
  回复人:ISRN
  注册时间:2005-05-08
  主题/回复:0/1
  积分:400
  等级:★★☆(五级)
  称号:略有小成

   
 5#楼 发表于2005-05-09 00:43:12  评分:0 

从零循环才能输出全部;一楼说的对;<=是上限而不是下限!试过了才知道对错;不要在一边空说
 6#楼  
 
  回复人:topsend
  注册时间:2008-09-26
  主题/回复:1/8
  积分:47
  等级:★(二级)
  称号:初出茅庐

   
 6#楼 发表于2008-09-28 13:39:12  评分:1 

回复给楼主(一起PHP)
干吗要用$tt=split($kk,$aa);
用$tt=explode($kk,$aa)也是可以的嘛.
拓森网络--LAMP架构的虚拟主机,LINUX主机,PHP空间租用服务
  页数1/1首页 « 1 » 末页
  发表回复:您还没有登陆,无法发表回复。请先[登陆]

一起PHP技术联盟 主办:一起PHP 联系方式:站长QQ:4304410 QQ群:8423742 20159565 站长博客 E-mail: nqp@nqp.me 执行时间:0.01sec
SimsmaBBS 2008 (v6.0) Developed by 17php.com,Copyright(C)2003-2010 All rights reserved. 副本授权:一起PHP官方专用版