一、匹配次数
  (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. 国内maven镜像

    <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...

  2. MySQL Workbench类型之MySQL客户端工具的下载、安装和使用

    本博文的主要内容有 .MySQL Workbench的下载 .MySQL Workbench的安装 .MySQL Workbench的使用 个人推荐,比较好的MySQL客户端工具 注意啊! 对于noi ...

  3. hdu 1242 dfs/bfs

    Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...

  4. java实现链表结构

    1. 定义节点node public class Node<T> { private Node<T> pre; private Node<T> next; priv ...

  5. Linux内核中SPI/I2c子系统剖析

    Linux内核中,SPI和I2C两个子系统的软件架构是一致的,且Linux内核的驱动模型都以bus,driver,device三种抽象对象为基本元素构建起来.下文的分析将主要用这三种抽象对象的创建过程 ...

  6. [Reactive Programming] Async requests and responses in RxJS

    We will learn how to perform network requests to a backend using RxJS Observables. A example of basi ...

  7. AndroidManifest.xml中的application中的name属性 分类: android 学习笔记 2015-07-17 16:51 116人阅读 评论(0) 收藏

    被这个不起眼的属性折磨了一天,终于解决了. 由于项目需要,要合并两个android应用,于是拷代码,拷布局文件,拷values,所有的都搞定之后程序还是频频崩溃,一直没有找到原因,学android时间 ...

  8. Creating Custom Shadows ——创建自定义shadow

    Custom shadows are a Robolectric feature that allows you to make targeted changes in the way Android ...

  9. Driving the Activity Lifecycle

    Before Robolectric 2.2, most tests created Activities by calling constructors directly, (new MyActiv ...

  10. try{}catch(){}//根据异常信息使用不同的方法要怎么实现

    try{ }catch(Exception e){ if(e.getMessage().contains("123456798")) //使用e.getMessage().cont ...