一、正则表达式的历史背景
  1,内容深厚的正则表达式
    ^.+@.+\\..+$ 形式
    字符串搜索与匹配的工具
  2,应用范围
    手机输入法
    Windows文件搜索
    linux 列出文件命令
    网站用户注册,如邮箱、手机号码的表单验证 
-------------------------------------------------------

二、正则表达式函数解析
  1,准备工作,在此选择 php 来学习正则表达式
  2,事先建立好一个 show() 函数
    /**
      * description: php正则表达式函数
    */
    /**
    * @name:show
    * @description : output debug
    * @param $var : input data 
    * @return void
    */

    

    function show($var = null){
      if ( empty( $var ) ) {
        echo 'null';
      } elseif( is_array($var) || is_object($var) ){
        echo "<pre>";
        print_r($var);
        echo "</pre>";
      } else{
        echo $var;
      }
    }
3,php 中常用的正则表达式函数(使用最频繁),返回匹配到的次数
  (1)preg_match($pattern, $subject, [array &$matches]) 只会匹配一次
    preg_match_all($pattern, $subject, array &$matches) 匹配所有

    以下是代码实例
      $pattern = '/[0-9]/';
      $subject = 'hdgsah7ghgsj89gsgh7faf432';

      $m1 = $m2 = array();

      $t1 = preg_match($pattern, $subject, $m1); //$t1 = 1
      $t2 = preg_match_all($pattern, $subject, $m2); //$t2 = 7

      show($m1); //输出一个一维数组
      echo "<hr>";
      show($m2); //输出一个二维数组

  (2)preg_replace($pattern, $replacement, $subject)
  preg_filter($pattern, $replacement, $subject)

  代码实例

    $pattern = array('/[0123]/','/[456]/','/[789]/');
    $subject = array('hdg','sah7','ghgsj','89gsg','h7fa','f432');
    $replacement = array('你','好','!');

    $str1 = preg_replace($pattern, $replacement, $subject);
    $str2 = preg_filter($pattern, $replacement, $subject);

    show( $str1 );
    echo "<hr>";
    show( $str2 );

  (3) preg_grep($pattern, array $input)将无法匹配的值过滤掉 阉割版 preg_filter()

  (4) preg_split($pattern, $subject)
    代码实例
    $pattern = '/[0-9]/';
    $subject = '这9是2一段3文5字';
    $arr = preg_split($pattern, $subject);
    show($arr);
    输出
      Array
      (
      [0] => 这
      [1] => 是
      [2] => 一段
      [3] => 文
      [4] => 字
      )
  (5)preg_quote($str)
    正则运算符转义

  (6)正则表达式总结
    a,都以preg_开头
    b,除preg_quote() 外,第一个参数都是正则表达式

    c,preg_match() 表单验证
    d,preg_replace () 非法词汇过滤等

三、模式修正
  1,概述
    界定符、原子、量词、边界控制、模式单元
  2,界定符
    表示正则表达式开始和结束的位置
    $pattern = '/[0-9]/';
    $pattern = '#[0-9]#';
    $pattern = '{[0-9]}'; //在php中不推荐使用
  3, regexpal 工具
    用于调试正则表达式
  4,原子概念
    正则匹配最小单位
    可见原子:键盘输出后肉眼可见的字符
    不可见原子:换行符、回车、空格

    在匹配中文字符时,建议先转换 Unicode http://tool.chinaz.com/Tools/Unicode.aspx
  5,原子的筛选方式
    | 匹配两个或多个分支选择
    [] 匹配方括号中的任意一个原子 [789] 匹配 789 , [a-zA-Z0-9] 匹配字母和数字
    [^] 匹配方括号中的原子之外的任意字符 [^789] 匹配非 789
  6,元字符(原子的集合)
    . 匹配除换行符之外的任意字符
    \d 匹配任意一个十进制数字,即 [0-9]
    \D 匹配除数字之外的其他字符
    \s 匹配一个不可见原子 即[\f\n\r\t\v]
    \S 匹配一个可见的原子 [^\f\n\r\t\v]
    \w 匹配任意一个数字、字母、或下划线 [0-9a-zA-Z_]
    \W 匹配任意一个非数字、字母、或下划线 [^0-9a-zA-Z_]
  7,量词
    {n} 表示其前面的原子恰好出现 n 次
    {n,} 表示其前面的原子最少出现 n 次
    {n,m} 表示其前面的原子最少出现 n 次,最多出现 m 次
    * 匹配0次,1次或多次其之前的原子 即 {0,}
    + 匹配1次或多次其之前的原子 即 {1,}
    ? 匹配0次或1次其之前的原子

    举例子 5{2} ---- 55
    [a-zA-Z]{2} ---- ad1256135AW
    [\w]{4} ---- 连续出现4次字母、数字、下划线
    [\w]{4,8} ---- 4到8次字母、数字、下划线
    \d+ ---- 1到无穷大次数字出现
  8 ,边界控制
    ^ 匹配字符串开始的位置
    $ 匹配字符串结束的位置
    () 匹配其中的整体为一个原子
  9,修正模式
    贪婪匹配 匹配结果有歧义时取其长
    懒惰匹配 匹配结果有歧义时取其短 标识 U
    i 忽略英文大小写
    x 匹配过程中忽略空白 ,包括空格和制表符
    s 让元字符' . '匹配包括换行符在内的所有字符

四、正则表达式实战
  1,非空: .+
  2, 匹配一个保留两位小数的浮点数: \d+\.\d{2}$
  3, 大陆手机号: ^1(3|5|4|7|8)\d{9}
  4, email地址: ^\w+(\.\w)*@\w+(\.\w)+$
  5,url 地址: ^(https?://)?(\w+\.)+.[a-zA-Z]+$

五、正则表达式实战——正则表达式工具类

'require' => '/.+/',
'email' => '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/',
'url' => '/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/',
'currency' => '/^\d+(\.\d+)?$/',
'number' => '/^\d+$/',
'zip' => '/^\d{6}$/',
'integer' => '/^[-\+]?\d+$/',
'double' => '/^[-\+]?\d+(\.\d+)?$/',
'english' => '/^[A-Za-z]+$/',
'qq' => '/^\d{5,11}$/',
'mobile' => '/^1(3|4|5|7|8)\d{9}$/'

php下正则表达式整理的更多相关文章

  1. python正则表达式整理

    正则表达式在处理字符串时很大的作用,爬虫中也经常用到,下面就将一些常用正则表达式做一整理记录,方便以后查看. ^d   表示匹配以d开头的字符串 .      表示匹配任意字符串 *     表示前面 ...

  2. jquery下常用正则表达式整理(可直接粘贴使用)

    与正则表达式做比较的方法 var _val = '1234'; var _ev = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z] ...

  3. [转].NET进阶系列之一:C#正则表达式整理备忘

    本文转自:http://www.cnblogs.com/KissKnife/archive/2008/03/23/1118423.html 有一段时间,正则表达式学习很火热很潮流,当时在CSDN一天就 ...

  4. .NET进阶系列之一:C#正则表达式整理备忘

    有一段时间,正则表达式学习很火热很潮流,当时在CSDN一天就能看到 好几个正则表达式的帖子,那段时间借助论坛以及Wrox Press出版的<C#字符串和正则表达式参考手册>学习了一些基础的 ...

  5. 常用JavaScript正则表达式整理

    在表单验证中,正则表达式书写起来特别繁琐,本文整理了15个常用的JavaScript正则表达式,其中包括用户名.密码强度.整数.数字.电子邮件地址(Email).手机号码.身份证号.URL地址. IP ...

  6. .net 中常用的正则表达式整理

    相信很多伙伴都跟我一样有关于正则表达式的爱和恨,怎么说呢? 因为正则表达式规则繁多且复杂,想一个一个学 全部精通,需要耗费很长时间和精力, 但是我们用的地方并不是很多,所以我觉得这类东西需要做成类似工 ...

  7. linux下正则表达式学习

    下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为: 字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 向后引用.或一个八进制转义符.例如,'n' 匹配字符 " ...

  8. Linux基础-正则表达式整理---------------grep、sed、awk

    目录:    Ⅰ:正则表达式    Ⅱ:作业 Ⅰ:正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 在lin ...

  9. 正则表达式 整理(\w \s \d 点 贪婪匹配 非贪婪匹配 * + ? {} | [] ^ $ \b 单词边界 分组、re.findall()、re.split()、re.search()、re.match()、re.compile()、re.sub())

    re.findall  匹配到正则表达式的字符,匹配到的每个字符存入一个列表,返回一个匹配到的所有字符列表 一. 匹配单个字符 import re # \w 匹配所有字母.数字.下划线 re.find ...

随机推荐

  1. Symfony命令行

    Available commands:  help                                  显示命令的帮助信息  list                           ...

  2. bzoj 1295: [SCOI2009]最长距离

    题目链接 1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1165  Solved: 619[Submit][ ...

  3. google浏览器的安装

    很简单,命令行下安装命令:apt-get install google-chrome-stable(如安装不成功,输入apt-get -f install进行修复依赖,之后在菜单里就可以看到图标了) ...

  4. IOS 表视图(UITableVIew)的使用方法(5)表视图的编辑功能(删除)

    默认的,如果表视图支持编辑,那用户可以通过两种方式来删除某些行,其一为单击左侧的红色按钮后行右侧显示“Delete”按钮,其二为在单元行上的手指向左滑动,“Delete”按钮也会出现供用户单击.无论哪 ...

  5. android开发环境安装记录

    首先进入http://developer.android.com/sdk/index.html, Google提供了一个新的DeveloperTools,即:ADT Bundle,中文翻译之:ADT捆 ...

  6. MacOS下使用VMware5 破解 安装win7 ISO 激活

    VMware5 下载 破解 以及win7 ISO版本的安装 激活VMware5 下载与破解参考方法http://www.macx.cn/thread-2060440-1-1.htmlVMware5 是 ...

  7. Jacob

    http://www.cnblogs.com/luckyxiaoxuan/archive/2012/06/13/2548331.html http://blog.csdn.net/qingwangyo ...

  8. android中文字高亮设置案例

    在android中我们有时候需要对一些标示性的文字进行高亮[用不同的颜色显示],例如微博中的@**等等...这些特效是通过SpannableString这个类来实现的 思路是将要显示的string进行 ...

  9. BZOJ 1023

    program bzoj1023; uses math; ; maxn=; maxm=; type edge=record togo,next:longint; end; var n,m,cnt,in ...

  10. jvm的内存区域简介

    1.内存区域划分 jvm在执行java程序过程中会将管理的内存划分成若干不同的数据区域,他们分别是程序计数器,堆,方法区,虚拟机栈,本地方法栈. 1.1指令计数器 指令计数器是线程私有的,每个线程都有 ...