一、匹配次数
  (1) * 匹配前面的子表达式零次或多次
  (2) + 匹配前面的子表达式一次或多次,+ 等价于 {1,}
  (3) ? 匹配前面的子表达式零次或一次,? 等价于 {0,1}
  (4){n} n 是一个非负整数,匹配确定的n 次
  (5){n,} n 是一个非负整数,至少匹配n 次
  (6){n,m} m 和 n 均为非负整数,其中n <= m,最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格

二、匹配值
  (1) x|y 匹配 x 或 y
  (2)[xyz] 字符集合
  (3)[^xyz] 负值字符集合
  (4)[a-z] 字符范围,匹配指定范围内的任意字符
  (5)[^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符

  (1)\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符
  (2)^ 匹配输入字符串的开始位置
  (3) $ 匹配输入字符串的结束位置
  (4) ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的
  (5) . 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式
  (6)( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。

三、非打印字符
  (1)\d 匹配一个数字字符。等价于 [0-9]
      \D 匹配一个非数字字符。等价于 [^0-9]
  (2)\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'
     \W 匹配任何非单词字符。等价于'[^A-Za-z0-9_]'
  (3)\b 匹配一个单词边界,也就是指单词和空格间的位置
     \B 匹配非单词边界
  (4)\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]
     \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
  (5)\f 匹配一个换页符。等价于 \x0c 和 \cL
  (6)\n 匹配一个换行符。等价于 \x0a 和 \cJ
  (7)\r 匹配一个回车符。等价于 \x0d 和 \cM
  (8)\t 匹配一个制表符。等价于 \x09 和 \cI
  (9)\v 匹配一个垂直制表符。等价于 \x0b 和 \cK

四、匹配特殊字符
  所谓特殊字符,就是一些有特殊含义的字符,如果要匹配这些特殊字符本身,则需要字符转义,即在其前加一个\。
  $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
  ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
  * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
  + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
  . 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
  [ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
  ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
  \ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。
  ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
  { 标记限定符表达式的开始。要匹配 {,请使用 \{。
  | 指明两项之间的一个选择。要匹配 |,请使用 \|。

五、常用的正则匹配
  1)、整数
    1、整数 : "/^-?\d+$/"
    2、正整数: "/^[1-9]+$/"
    3、负整数: "/^-?\d+$/"
    4、非正整数: "/^((-\d+)|(0+))$/"
    5、非负整数: "/^((\d+)|(0+))$/"

  2)、浮点数
    1、浮点数: "/^(-?\d+)(\.\d+)?$/" //即所有的数字
    2、正浮点数 : "/^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/"
    3、负浮点数: "/^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/"
    4、非正浮点数: "/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/" //(负浮点数 + 0)
    5、非负浮点数: "/^\d+(\.\d+)?$/" // 0+正整数+整数(798.687)

  3)、英文字母
    1、纯英文字母: "/^[A-Za-z]+$/"
    2、大写英文字符: "/^[A-Z]+$/"
    3、小写英文字母: "/^[a-z]+$/"
    4、英文字母和数字: "/^[A-Za-z0-9]+$/"
    5、英文字母和下划线: "/^\w+$/"

  4)、中文
    1、中文、英文、数字及下划线:"/^[\u4e00-\u9fa5_a-zA-Z0-9]+$/"
    2、中文字符:"/[^u4E00-u9FA5]/" //只要语句中有汉字就行
    3、双字节字符(包括汉字在内):"/[^\x00-\xff]/"
    4、gb2312:if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str))
      utf-8 :if(!preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
    5、Unicode编码中的汉字范围:"/^[\u2E80-\u9FFF]+$/"

  5)、其他
    1、空行:"/\n[\s| ]*\r/"
    2、HTML:"/<(.*)>.*<\/\1>|<(.*) \/>/"
    3、首尾空格:"/(^\s*)|(\s*$)/"
    4、sql语句:/"^(select|drop|delete|create|update|insert).*$/"
    5、信息中的任何数字 :"/(-?\d*)(\.\d+)?/"

六、应用
  1、电话区号
    (1) "/^0\d{2,3}$/" //区号
    (2) "/^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/" //7或者8位
    (3) "/^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/" //7或者8位

  2、手机号码
    (1) "/^[(86)|0]?(13\d{9})|(15\d{9})|(18\d{9}$/)/"
  3、email地址
    (1) "/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/" //xxxxx@xxx.xxx (x代表任何字母和数字,不限个数)
    (2) "/^\w+@\w+\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2})?$/"
    (3) "/^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$/"
    (4) "/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/"
    (5) "/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/"
    (6) "/([\w\-]+\@[\w\-]+\.[\w\-]+)/"
  4、用户名:"/^[a-z0-9_-]{3,16}$/"
    密 码:"/^[a-z0-9_-]{6,18}$/"
  5、账号
    (1) "/^[a-zA-Z][a-zA-Z0-9_]{4,15}$ /" //(字母开头,允许5-16字节,允许字母数字下划线)
  6、验证身份证
    (1) "/^\d{6}((1[89]|(2\d)))\d{2}((0\d)|(1[0-2]))((3[01])|(0-2)\d)\d{3}(\d|x)$/i/"
  7、验证url
    (1) "/^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/"
    (2) "/^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$/"
    (3) "/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/"
    (4) "/http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? /"
    (5) "/<a href="(.*?)">(.*?)<\/a>/"
    (6) "/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/"
    (7)"/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i" //此正则表达式同样允许 URL 中的下划线
  8、IP地址
    (1) "/^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$/"
    (2) "/(\d+)\.(\d+)\.(\d+)\.(\d+) /"
    (3) "/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/"
    (4) "/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/"

  9、邮政编码
    (1) "/[1-9]{1}(\d+){5}/"
    (2) "/^[1-9]\d{5}$ /"
  10、时间
    (1) 年-月-日: "/^(d{2}|d{4})-((0([1-9]{1}))|(1[0|1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/"
    (2) 月/日/年: "/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/"

  11、图片链接
    (1) 网络链接:"/(h|H)(r|R)(e|E)(f|F) *= *('|')?(\w|\\|\/|\.)+('|'| *|>)?/"
    (2) 图片链接:"/(s|S)(r|R)(c|C) *= *('|')?(\w|\\|\/|\.)+('|'| *|>)?/"
  12、html标签
    (1) "/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/"
  13 、删除代码\\注释:

    "(?<!http:|\S)//.*$"

四、正则函数
  1、preg_grep--返回与模式匹配的数组单元,结果使用从输入数组来的键名进行索引,如果不希望这样的结果,用array_values()对结果重新索引。
    $fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);

  2、preg_match_all -- 进行全局正则表达式匹配
    $html = "<b>bold text</b><a href=howdy.html>click me</a>";
    preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
    for ($i=0; $i< count($matches[0]); $i++) {
      echo "matched: ".$matches[0][$i]."\n"."<br/>";
      echo "part 1: ".$matches[1][$i]."\n"."<br/>";
      echo "part 2: ".$matches[3][$i]."\n"."<br/>";
      echo "part 3: ".$matches[4][$i]."\n\n"."<br/>";
    }

    preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_SET_ORDER);
      print $out[0][0].", ".$out[0][1]."\n";
      print $out[1][0].", ".$out[1][1]."\n";

    preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_PATTERN_ORDER);
      print $out[0][0].", ".$out[0][1]."\n";
      print $out[1][0].", ".$out[1][1]."\n";

  3、preg_match -- 进行正则表达式匹配,在第一次匹配之后将停止搜索
    preg_match("/^(http:\/\/)?([^\/]+)/i","http://www.php.net/index.html", $matches); // 从 URL 中取得主机名
    $host = $matches[2]; //$host = www.php.net

    preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches); // 从主机名中取得后面两段
    echo "domain name is: {$matches[0]}\n"."<br/>"; //domain name is: php.net

  4、preg_replace -- 执行正则表达式的搜索和替换
    //逆向引用后面紧接着数字的用法
      $string = "April 15, 2003";
      $pattern = "/(\w+) (\d+), (\d+)/i";
      $replacement = "\${1}1,\$3";
      print preg_replace($pattern, $replacement, $string);

    //在 preg_replace() 中使用索引数组
      $string = "The quick brown fox jumped over the lazy dog.";
      $patterns[0] = "/quick/";
      $patterns[1] = "/brown/";
      $patterns[2] = "/fox/";
      $replacements[2] = "bear";
      $replacements[1] = "black";
      $replacements[0] = "slow";
      print preg_replace($patterns, $replacements, $string);//The bear black slow jumped over the lazy dog.
    
    //替换数个值
      $patterns = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/","/^\s*{(\w+)}\s*=/");
      $replace = array ("\\3/\\4/\\1\\2", "$\\1 =");
      print preg_replace ($patterns, $replace, "{startDate} = 1999-5-27");//$startDate = 5/27/1999

    //使用 /e 修正符
    //这将使输入字符串中的所有 HTML 标记变成大写。
      preg_replace ("/(<\/?)(\w+)([^>]*>)/e","'\\1'.strtoupper('\\2').'\\3'",$html_body);

  5、preg_split -- 用正则表达式分割字符串

///////////////////////////////////////////
134.用正则表达式限制只能输入中文:
  onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')"
  onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"

136.用正则表达式限制只能输入全角字符:
  onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')"
  onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"

138.用正则表达式限制只能输入数字:
  onkeyup="value=value.replace(/[^d]/g,'') "
  onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

140.用正则表达式限制只能输入数字和英文:
  onkeyup="value=value.replace(/[W]/g,'') "
  onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

php基础知识【函数】(5)正则preg的更多相关文章

  1. javascript基础知识-函数

    1.javascript中函数有两种定义方式: 函数语句定义和表达式定义 //函数有定义 function test(){ console.log("This is a function&q ...

  2. javascript基础知识--函数定义

    函数声明式 function funname( 参数 ){ ...执行的代码 } 声明式的函数并不会马上执行,需要我们调用才会执行:funname(); * 分号是用来分隔可执行JavaScript语 ...

  3. C#基础知识-函数的定义和调用(五)

    函数也可以称为方法,可以很方便的把一些行为封装到函数里面,当调用这一函数时会把函数块里面的代码按照顺序执行,方法可以有多种形式,有无参数,有无返回值等. 1. 函数的定义   函数定义的基本格式: s ...

  4. 【shell编程】之基础知识-函数

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action; [return ...

  5. 020PHP基础知识——函数(三)

    <?php /** * 任何数量的参数: * func_get_args() 接收一个数组,数组里面包含所有参数 * func_num_args() 取得共有几个参数 * func_get_ar ...

  6. 019PHP基础知识——函数(二)

    <?php /** * 变量的作用范围 * 函数体内的变量只作用于函数体内. */ /*$bbs="bbs.blog.com"; function say(){ $bbs=& ...

  7. 018PHP基础知识——函数(一)

    <?php /** *函数:一部分可重复执行的代码段,多次执行一次编译 * 特点: * 1.减少程序运行的复杂性 * 2.提高程序的可靠性 * 3.提高软件的开发效率 * 4.提高程序的维护性 ...

  8. 1.15 Python基础知识 - 函数

    函数是可重用的程序代码段. 一.函数的声明和调用 声明格式: def 函数名([形参列表]): 函数体 调用格式: 函数名([实参列表]) 函数名:是一种标识符,命名规则为全小写字母,可以使用下划线增 ...

  9. pl/sql基础知识—函数快速入门

    n  函数 函数用于返回特定的数据,当建立函数式,在函数头部必须包含return子句,而在函数体内必须包含return语句返回的数据,我们可以使用create function来建立函数,实际案例: ...

  10. SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数

    Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下:   ...

随机推荐

  1. 基础排序算法之并归排序(Merge Sort)

    并归排序是学习分治法 (Merge Sort) 的好例子.而且它相对于选择,插入,冒泡排序来说,算法性能有一定提升.我首先会描述要解决的问题,并给出一个并归排序的例子.之后是算法的思路以及给出伪代码. ...

  2. Centos 下安装MongoDB

    Centos 下安装MongoDB 一.安装方法 方法(一) 1  配置包管理系统 创建/etc/yum.repos.d/mongodb.repo 文件,当然我们使用的是64位系统,32位的情况不再考 ...

  3. nyoj 102 次方求模【快速幂】

    次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 求a的b次方对c取余的值   输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...

  4. Java中json工具对比分析

    Java中几个json工具分析 1, 环境 JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码 2,分析对象 jackson1.8.2 http://jackson.c ...

  5. xen credit scheduler and policy

    最近在研究xen的vcpu 调度和cpu qos策略,现在默认的scheduler是credit, 对应的代码是sched_credit.c xen支持好几种控制策略,效果最好的当选pin, 灵活性最 ...

  6. GinWin命令控制台执行指令

  7. CH BR8(小学生在上课-逆元和互质数一一对应关系)

    小学生在上课 总时限 11s 内存限制 256MB 出题人 jzc 提交情况 66/277 初始分值 600 锁定情况 背景 小学生在学校上数学课…… 描述 数学课上,小学生刚学会了乘除法.老师问了他 ...

  8. 再回首,Java温故知新(十):数组

    数组是程序中用来存储同一类型值的集合,基本所有编程语言中都有这种类型存在.声明数组时需要指出数组类型和数组变量名,初始化后数组的长度不可变,使用过程中通过下标来访问数组中的元素,示例代码如下: int ...

  9. python模拟登陆之下载

    好长时间没有更新博客了,哈哈. 今天公司给了这么一个需求,现在我们需要去淘宝获取上一天的订单号,然后再根据订单号去另一个接口去获取订单详情,然后再给我展示到web! 中间涉及到的技术点有: 模拟登陆 ...

  10. iOS RSA 加密解密及签名验证

    1.首先要下载openssl.这个不用说,直接官网下载或者用brew install openssl下载. 2.终端生成私钥密钥. 2.1生成私钥 openssl genrsa - 2.2生成密钥 o ...