一、正则表达式的历史背景
  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. [LeetCode]题解(python):108-Convert Sorted Array to Binary Search Tree

    题目来源: https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ 题意分析: 给出一个排好序的数组,根据这 ...

  2. zookeeper 数据存储特点

    zookeeper 和elasticseaarch 数据存储特点: 1.zookeeper; [Zookeeper提供的一致性是弱一致性,首先数据的复制有如下规则:zookeeper确保对znode树 ...

  3. BZOJ 1008 越狱 (组合数学)

    题解:正难则反,从总数中减去全部相邻不相同的数目就是答案,n*(n-1)^(m-1):第一个房间有n中染色方案,剩下m-1个房间均只有n-1种染色方案,用总数减就是答案. #include <c ...

  4. shell脚本内与mysql交互

    一: mysqlCMD="mysql -h${MYSQL_HOST}  -P${MYSQL_PORT}  -u${MYSQL_USER} -p${MYSQL_PASS}" crea ...

  5. SVN同步出现故障

    1.错误描写叙述    同步SVNStatusSubscribe时报告了错误,1中的0个资源已经同步    同步/frame时错误发生:Error getting status for resourc ...

  6. sqlite性能简单測试

    主要測试sqlite在大数据量下的插入及查询性能: 測试环境:Centos6.4  1G内存  单核 数据量 大小 索引字段检索(耗时) 非索引字段检索(耗时) 总插入时间 10W 19M 0.001 ...

  7. Linux通过网卡驱动程序和版本号的信息

    检查卡制造商和信号 查看基本信息:lspci 查看详情:lspci -vvv   # 3小作文v 查看卡信息:lspci | grep Ethernet 查看网卡驱动 查看网卡驱动信息:lspci - ...

  8. Nlog的简单使用

    Nlog是.net平台下的开源日志组件,相当于log4net用法配置更简单.用途可以将日志输出到数据库,文本文件,控制台等.首先引用NLog.dll,顺便也将NLog.xml丢到运行目录准备工作完后, ...

  9. python成长之路13

    一:SqlAlchemy ORM ORM:Object Relational Mapping 对象关系映射是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 SQLAlchemy是 ...

  10. Regex阅读笔记(一)之入门

    在检查一行文本时,^代表一行的开始,$代表结束. 字符数组:[],在里面列举任意多个字符,可以匹配其中任意一个字符,字符组元字符'-'表示一个范围. ^$表示一个空行(没有任何字符,包括空白字符) [ ...