zoukankan      html  css  js  c++  java
  • PHP正则表达式语法汇总

    行定位符、单词定界符实例用法(正则表达式字符集1)

    行定位符(^和$):行定位符就是用来描述字串的边界。"^"表示行的开始;"$"表示行的结尾。如:

    ^tm

    这个表达式表示要匹配字串I的开始位置是行头,如:tm equal Tomorrow Moon就可以匹配,而Tomorrow Moon equal tm就不可以匹配

    tm$

    则后者可以匹配而前者不可以。如果想要匹配的字串可以出现在字符串的任意部分,那么可以直接写成:

    tm

    单词定界符(、B):

    使用tm可以匹配在字符串中出现的任何位置。那么类似html,utmost中的tm也会被查找出来。但现在需要匹配的是单词tm,而不是单词的一部分。这时可以使用单词定界符,表示要查找的字串为一个完整的单词,如:

    tm

    还有一个大写的B,意思和相反。它匹配的字串不能是一个完整的单词,而是其他单词或字串的一部分。如:

    BtmB

    非打印字符、特殊字符、限定符实例用法

    非打印字符

    cx 匹配由x指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。

    f 匹配一个换页符。等价于 x0c 和 cL。

    匹配一个换行符。等价于 x0a 和 cJ。

    匹配一个回车符。等价于 x0d 和 cM。

    s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ f v]。

    S 匹配任何非空白字符。等价于 [^ f v]。

    匹配一个制表符。等价于 x09 和 cI。

    v 匹配一个垂直制表符。等价于 x0b 和 cK。

    特殊字符

    $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘ ’ 或 ‘ ’。要匹配 $ 字符本身,请使用 $。

    ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。

    * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。

    + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。

    . 匹配除换行符 之外的任何单字符。要匹配 .,请使用 。

    [ 标记一个中括号表达式的开始。要匹配 [,请使用 [。

    ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。

    将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’ ’ 匹配换行符。序列 ‘\’ 匹配 “”,而 ‘(’ 则匹配 “(”。

    ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 ^。

    { 标记限定符表达式的开始。要匹配 {,请使用 {。

    | 指明两项之间的一个选择。要匹配 |,请使用 |。

    限定符

    有*或+或?或{n}或{n,}或{n,m}共6种。

     *、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

    * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。

    + 匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。

    ? 匹配前面的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等价于 {0,1}。

    {n} n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。

    {n,} n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。

    {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}” 将匹配 “fooooood” 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。

    正则表达式字符簇

    [a-z] //匹配所有的小写字母

    [A-Z] //匹配所有的大写字母

    [a-zA-Z] //匹配所有的字母

    [0-9] //匹配所有的数字

    [0-9.-] //匹配所有的数字,句号和减号

    [ f ] //匹配所有的白字符

    PHP的正规表达式有一些内置的通用字符簇,列表如下:

    [[:alpha:]] 任何字母

    [[:digit:]] 任何数字

    [[:alnum:]] 任何字母和数字

    [[:space:]] 任何白字符

    [[:upper:]] 任何大写字母

    [[:lower:]] 任何小写字母

    [[:punct:]] 任何标点符号

    [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

    子表达式、子表达式计数、分支用法浅析

    子表达式

    例如:

    (very) *large

    可以匹配"large","very large","very very large"等。

    子表达式计数

    例如:

    (very){1,3}

    表示匹配“very”,“very very”和“very very very”。

    分支

    例如,如果要匹配com、edu、或net,就可以使用如下所示的表达式:

    com|edu|net

    与Perl兼容的正则表达式函数

    字符串的匹配与查找

    preg_match()函数和preg_match_all()函数

    <?php
    
    $str = 'cyy is cute.';
    $preg = '/w{2}/';
    $num1 = preg_match($preg,$str,$str1);
    echo $num1.'<br>';
    var_dump($str1);
    
    $num2 = preg_match_all($preg,$str,$str2);
    echo $num2.'<br>';
    var_dump($str2);

    匹配结果如下:

    preg_quote()函数

    函数功能:该函数讲字符串str中的所有特殊字符进行自动转义。如果有参数delimiter,那么该参数

    所包含的字串也将被转义。函数返回转义后的字串。

    <?php
    
    $str = '!、$、^、*、+、.、[、]、\、/、cyy、<、>';
    $str2 = 'cyy';
    $res = preg_quote($str,$str2);
    echo $res.'<br>';

    函数preg_grep()

    <?php
    
    $preg = '/^d{3,4}-d{7,8}$/';
    $arr = array('043212345678','0431-7654321','12345678');
    $res = preg_grep($preg,$arr);
    var_dump($res);

    在数组$arr中匹配具有正确格式的电话号(010-1234****等),并保存到另一个数组中。

    字符串处理函数strstr()、strpos()、strrpos()、substr()

    如果只是查找一个字符串中是否包含某个子字符串,建议使用strstr()或strpos()函数,如果只是简单地从一个字符串中取出一段子字符串,建议使用substr()函数。虽然PHP提供的字符串处理函数不能完成复杂的字符串匹配,但处理一些简单的字符串匹配,执行效率则要比使用正则表达式稍高一些。

    函数strstr()搜索一个字符串在另一个字符串中的第一次的出现,该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回FALSE。该函数对大小写敏感,如需进行大小写不敏感的搜索,可以使用stristr()函数。该函数有两个参数,第一个参数提供被搜索的字符串,第二个参数为所搜索的字符串,如果该参数是数字,则搜索匹配数字ASCII值的字符。该函数的使用代码如下所示:

    <?php
    
    echo strstr('cyy is cute.','cyy').'<br>';
    echo strstr('cyy is cute.',chr(115));

    php用正则表达式匹配中文

    gbk编码下汉字正则

    1.判断字符串是否全是汉字

    <?php
    
    $str1 = '全部是中文';
    if (preg_match_all("/^([x81-xfe][x40-xfe])+$/", $str1, $match)) {
      echo '全部是中文';
    }else{
      echo '不全是中文';
    }
    
    echo '<br>';
    
    $str2 = '全部是中文~';
    if (preg_match_all("/^([x81-xfe][x40-xfe])+$/", $str2, $match)) {
      echo '全部是中文';
    }else{
      echo '不全是中文';
    }

    2.判断字符串是否包含汉字

    $str1 = '含有中文';
    if (preg_match("/^([x81-xfe][x40-xfe])+$/", $str1, $match)) {
      echo '含有中文';
    }else{
      echo '不含有中文';
    }
    
    echo '<br>';
    
    $str2 = '~~~';
    if (preg_match("/^([x81-xfe][x40-xfe])+$/", $str2, $match)) {
      echo '全含有中文';
    }else{
      echo '不含有中文';
    }

    UTF编码下匹配全部是中文:

    $str1 = '全部是中文';
    if (preg_match("/^[x{4e00}-x{9fa5}]+$/u", $str1)) {
      echo '全部是中文';
    }else{
      echo '不全是中文';
    }
    
    echo '<br>';
    
    $str2 = '全部是中文~';
    if (preg_match("/^[x{4e00}-x{9fa5}]+$/u", $str2)) {
      echo '全部是中文';
    }else{
      echo '不全是中文';
    }

    UTF编码下匹配含有中文:

    $str1 = '全部是中文';
    if (preg_match("/^[x{4e00}-x{9fa5}]+$/u", $str1)) {
      echo '含有中文';
    }else{
      echo '不含有中文';
    }
    
    echo '<br>';
    
    $str2 = '~';
    if (preg_match("/^[x{4e00}-x{9fa5}]+$/u", $str2)) {
      echo '含有中文';
    }else{
      echo '不含有中文';
    }

  • 相关阅读:
    Oracle分页问题
    win10系统vs2008环境wince项目无法创建问题
    工作满十年了
    让Vs2013 完美支持EF6.1 Code First with Oracle 2015年12月24日更新
    Oracle DMP 操作笔记之根据DMP逆向推导出导出的表空间名称
    【转】如何在 Eclipse 中進行 TFS 的版本管控
    【转】什麼是 Team Explorer Everywhere 2010 ?TFS 專用的 Eclipse 整合套件的安裝與設定
    [转]有关USES_CONVERSION
    [转]使用VC/MFC创建一个线程池
    IT男的”幸福”生活
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12957095.html
Copyright © 2011-2022 走看看