码迷,mamicode.com
首页 > Web开发 > 详细

php下正则表达式整理

时间:2015-05-28 22:46:45      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

一、正则表达式的历史背景
  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下正则表达式整理

标签:

原文地址:http://www.cnblogs.com/zhongshanblog/p/4537004.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!