PHP笔记2:PHP 7 中的正则表达式

来源:互联网 发布:无限接收器软件下载 编辑:程序博客网 时间:2024/06/05 17:53

  我是在windows10下安装了PHP 7.0.10 ,其实我感觉如果是新学PHP的话(比如我= =),建议安装PHP 5,因为现在的参考书、mooc等基本是以PHP 5为例进行教学,而PHP 5 到 PHP 7 还是有一定区别的。
  参考手册:http://php7.phpxy.com/index.html
  php迁移
  先说一下正则表达式规则。
  正则表达式由普通字符和元字符组成,其中元字符用于模式匹配,下表列出了元字符的含义说明。

元字符 描述 示例 . 匹配任意单个字符。 正则表达式 a.c 可以匹配 aac,a2c,a#c 等 $ 匹配字符串的结尾。 正则表达式 abc$ 可以匹配最后以 abc 结尾的字符串 ^ 匹配字符串的开始。 正则表达式 ^what 可以匹配以 what 开始的字符串 * 匹配 * 前面的子串零次或多次 正则表达式 abc*d 可以匹配 abcd、aad、bd、bcd、d等字符串 + 匹配 * 前面的子串一次或多次 正则表达式 abc*d 可以匹配 abcd、aad、bd、bcd等字符串 {i} 匹配指定个数的字符 正则表达式 [0-9]{11} 可以匹配由11个数字字符组成的字符串 {i1,2} 匹配个数在i1到i2范围的字符 正则表达式 [0-9]{8,11} 可以匹配由8-11个数字字符组成的字符串 \ 转义符,将字符串中的元字符当作普通的字符匹配 正则表达式 \*a 匹配 *a [ ] 匹配[]中的任何一个字符 正则表达式 [ab]c 可以匹配 ac、bc [c1-c2] 在[]中使用连字符‘-’指定字符的区间 正则表达式 [0-9] 可以匹配任何数字字符 [^c1-c2] 匹配除了[]中的任意字符 正则表达式 [^0-9] 匹配除了数字字符之外的任意字符 ( ) 用于定义匹配的子模式 | 从多个选项中选择一个进行匹配 正则表达式 (a|b|c) 可以匹配 a、b、c

 
/* 感觉用markdown 写表格好心累啊 :( */

  度娘可以帮你找到更多更详细的关于正则表达式的语法分析,这点是我总结的简洁版,个人感觉基本够用了~
  在真正实践时,我照着书上给的例子,写了一个关于邮箱地址的验证

<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>正则表达式</title></head><body><?php    $email = "123@123.com";    if(!ereg("^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_]+\.+[a-zA-Z0-9.]+$",$email)){        echo "这不是一个有效的email地址";        exit;    }?></body></html>

其中,^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_]+\.+[a-zA-Z0-9.]+$ 这个大家可以记下来,基本邮箱的正则表达式都是这个[嘿嘿嘿]
BUT!!!出错了!
PHP Fatal error: Uncaught Error: Call to undefined function ereg() in……
ereg()这个书上就是这么写这么用的函数竟然未定义!!?难道PHP配置时出错了?
不,是它被PHP 7移除了!!!
removed
 
在百度之后,我选择了用preg_match()这个函数来替代ereg()

<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>正则表达式</title></head><body><?php    $email = "123@123.com";    if(!preg_match("^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_]+\.+[a-zA-Z0-9.]+$",$email)){        echo "这不是一个有效的email地址";        exit;    }?></body></html>

BUT!!!又出错了!
PHP Warning: preg_match(): No ending delimiter ‘^’ found in ……
我有点懵,‘^’这个元字符是为了匹配一个字符串的开始,为什么还要在结尾加一个!!?
在求助度娘后,找到了原因:preg_match 的正则表达式需要有定界符(ereg()则不需要),即除了要有“”双引号外,还需要要用/ /定义正则表达式的边界。

修改完种种因为PHP版本带来的bug,终于成功通过

正则表达式是功能强大的对文本进行处理的技术,希望大家可以多多学习,多多实践,有问题及时解决~
    

0 0
原创粉丝点击