zoukankan      html  css  js  c++  java
  • php正则表达式常用函数

    1、preg_match($reg, $str, $match)

    $reg 表示需要搜索匹配的正则表达式

    $str 表示需要搜索的目标字符串

    $match 表示第一个匹配的数组

    返回值是数值型,表示匹配成功的个数

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'yftest: 1833abcefg: 8888: test';
    $reg = '/(w+): (d+)/';
    $abc = preg_match($reg, $str);
    var_dump($abc);
    //输出 C:wamp64wwwlearn	est.php:7:int 1

    preg_match($reg, $str, $match); var_dump($match); //输出 array (size=3) // 0 => string 'yftest: 1833' (length=12) 表示匹配总的字符串 // 1 => string 'yftest' (length=6) 表示匹配第一个括号的字符串 // 2 => string '1833' (length=4) 表示匹配第二个括号的字符串 ?>

    2、preg_match_all($reg, $str, $match)

    $reg 表示需要搜索匹配的正则表达式

    $str 表示需要搜索的目标字符串

    $match 表示第一个匹配的数组

    返回值是数值型,表示匹配成功的个数

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'yftest: 1833abcefg: 8888: test';
    $reg = '/(w+): (d+)/';
    $abc = preg_match_all($reg, $str);
    var_dump($abc);
    //输出 C:wamp64wwwlearn	est.php:7:int 2
    echo '<hr>';
    preg_match_all($reg, $str, $match);
    var_dump($match);
    //输出
    //array (size=3)
    //  0 =>
    //    array (size=2)                            表示匹配的全部字符串
    //      0 => string 'yftest: 1833' (length=12)
    //      1 => string 'abcefg: 8888' (length=12)
    //  1 =>
    //    array (size=2)                            表示匹配上的第一个括号的全部字符串
    //      0 => string 'yftest' (length=6)
    //      1 => string 'abcefg' (length=6)
    //  2 =>
    //    array (size=2)                            表示匹配上的第二个括号的全部字符串
    //      0 => string '1833' (length=4)
    //      1 => string '8888' (length=4)
    ?>

     3、preg_replace($reg, $replacement, $str)

    $reg 表示正则表达式

    $replacement 表示需要替换成的目标字符

    $str 表示被执行的字符串

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'today is good day; are you ok???';
    $reg = "/od/";
    $newStr = preg_replace($reg, 'haha', $str);
    echo $newStr;
    //输出 thahaay is gohaha day; are you ok???
    ?>

    如果要引用括号里的内容可以用$1...来代替

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'today is good day, yestoday notoday currenttoday yeschoose';
    $reg = '/(today).*?(choose)/';
    $res = preg_replace($reg, '$1 are you ok?', $str);
    var_dump($res);
    //输出 today are you ok?
    ?>

    注:在匹配中文的时候需要进行转义,否则会出来乱码

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $res = '/./u';
    $str = '我爱中国';
    preg_match_all($res, $str, $match);
    var_dump($match);
    //输出
    //array (size=1)
    //  0 =>
    //    array (size=4)
    //      0 => string '我' (length=3)
    //      1 => string '爱' (length=3)
    //      2 => string '中' (length=3)
    //      3 => string '国' (length=3)
    
    //如果需要匹配中文可以用以下正则
    $reg = '/[x{4e00}-x{9fa5}]/u';
    preg_match_all($reg, $str, $match);
    var_dump($match);
    //输出
    //array (size=1)
    //  0 =>
    //    array (size=4)
    //      0 => string '我' (length=3)
    //      1 => string '爱' (length=3)
    //      2 => string '中' (length=3)
    //      3 => string '国' (length=3)
    ?>

    i => 表示忽略大小写,m => 表示多行模式 ,U => 表示将整个正则表达式整体改成懒惰模式

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = '<img src="http://www.baidu.com"><div>this is baidu address</div>';
    $reg = '/<img.*>/U';
    preg_match($reg, $str, $match);
    var_dump($match);
    //输出 array (size=1)
    //  0 => string '<img src="http://www.baidu.com">' (length=32)
    ?>

    4、preg_replace_callback($reg, $callback, $str)

    $reg 表示正则表达式

    $callback 表示回调函数

    $str 表示需要被执行的目标字符串

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'helloworld, hiworld';
    $reg = '/(hi)/';
    $newStr = preg_replace_callback($reg, function($all){
        var_dump(func_get_args());
        return 'ok';
    }, $str);
    var_dump($newStr);
    //输出 array (size=1)
    //  0 => 
    //    array (size=2)
    //      0 => string 'hi' (length=2)
    //      1 => string 'hi' (length=2)
    //C:wamp64wwwlearncheck.php:10:string 'helloworld, okworld' (length=19)
    ?>

    5、preg_split($reg, $str)

    $reg 表示正则表达式

    $str 表示目标字符串

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'aaabbb3cccddd5eeefff66ggg';
    $reg = '/d+/';
    $arr = preg_split($reg, $str);
    var_dump($arr);
    //输出 array (size=4)
    //  0 => string 'aaabbb' (length=6)
    //  1 => string 'cccddd' (length=6)
    //  2 => string 'eeefff' (length=6)
    //  3 => string 'ggg' (length=3)
    ?>

    6、preg_filter($reg, $replacement, $str)

    $reg 表示正则表达式,可以是一个数组

    $replacement 表示需要替换成的字符,可以是一个数组

    $str 表示目标字符串,可以是一个数组

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'aaabbb3cccddd5eeefff66ggg';
    $strArr = [
        'aaaaaa',
        'today is good 3 day',
        'fdffeifje'
    ];
    $regArr = [
        '/a+/',
        '/d+/',
        '/f+/',
    ];
    $target = ['yesA', 'yesB', 'yesC'];
    $arr = preg_filter($regArr, $target, $str);
    var_dump($arr);
    //输出 yesAbbbyesBcccdddyesBeeeyesCyesBggg
    var_dump(preg_filter($regArr, $target, $strArr));
    //输出 array (size=3)
    //  0 => string 'yesA' (length=4)
    //  1 => string 'todyesAy is good yesB dyesAy' (length=28)
    //  2 => string 'yesCdyesCeiyesCje' (length=17)
    ?>

    7、preg_quote($str)

    需要参数 str 并向其中 每个正则表达式语法中的字符前增加一个反斜线。

    $str表示需要转义的字符

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = '$abc./+eeefffg?';
    var_dump(preg_quote($str));
    //输出 $abc./+eeefffg?
    ?>

    8、正则的贪婪模式与懒惰模式

      ?符号放在元字符后面表示0或1,但如果放在量词后面表示将贪婪模式改为懒惰模式

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = '<img src="http://www.baidu.com"><div>this is baidu address</div>';
    $reg = '/<img.*>/';
    preg_match($reg, $str, $match);
    var_dump($match);
    //输出 array (size=1)
    //  0 => string '<img src="http://www.baidu.com"><div>this is baidu address</div>' (length=64)
    $newReg = '/<img.*?>/';
    preg_match($newReg, $str, $match);
    var_dump($match);
    //输出 
    //array (size=1)
    //  0 => string '<img src="http://www.baidu.com">' (length=32)
    ?>

     9、正则表达式分组的使用与反向引用

    使用正则表达式进行匹配的时候,可以使用()将需要的内容括起来,每个小括号的内容就会被当作一个小组,并保存到数组中

    第一个()的内容会保存到数组下标为1的元素中

    第二个()的内容会保存到数组下标为2的元素中

    以此类推(例子见preg_match的例子)

    反向引用是当你在正则表达式中用 (数字)时表示引用第n个括号里的正则表达式,如下例子:

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'sign are you ok sign today is good sign are day nice to meet you abc';
    $reg = '/(signs+are).*1/';
    preg_match($reg, $str, $match);
    var_dump($match);
    //输出 
    //array (size=2)
    //  0 => string 'sign are you ok sign today is good sign are' (length=43)
    //  1 => string 'sign are' (length=8)
    ?>

     10、正则表达式的其他要点

    正则表达式中加(?:)表示非捕获的意思

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'today is good day, yestoday notoday currenttoday';
    $res = '/(?:today).*?(?:day)/';
    preg_match_all($res, $str, $match);
    var_dump($match);
    //输出 array (size=1)
    //  0 => 
    //    array (size=2)
    //      0 => string 'today is good day' (length=17)
    //      1 => string 'today notoday' (length=13)
    ?>
    // 前瞻:
    exp1(?=exp2) 查找exp2前面的exp1
    // 后顾:
    (?<=exp2)exp1 查找exp2后面的exp1
    // 负前瞻:
    exp1(?!exp2) 查找后面不是exp2的exp1
    // 负后顾:
    (?<!exp2)exp1 查找前面不是exp2的exp1

     exp1(?=exp2)

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'helloworld, hellochina';
    $reg = '/hello(?=world)/';
    $res = preg_replace($reg, 'hi', $str);
    var_dump($res);
    ?>

    (?<=exp2)exp1

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'helloworld, hiworld';
    $reg = '/(?<=hi)world/';
    $res = preg_replace($reg, 'china', $str);
    var_dump($res);
    //输出 helloworld, hichina
    ?>

    exp1(?!exp2)

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'today is good day, yestoday notoday currenttoday yeschoose';
    $reg = '/yes(?!today)/';
    $res = preg_replace($reg, 'ok', $str);
    var_dump($res);
    //输出 today is good day, yestoday notoday currenttoday okchoose
    ?>

    (?<!exp2)exp1

    <?php
    header('content-type: text/html; charset=utf8');
    ini_set('display_errors', true);
    $str = 'helloworld, hiworld';
    $reg = '/(?<!hi)world/';
    $res = preg_replace($reg, 'china', $str);
    var_dump($res);
    //输出 hellochina, hiworld
    ?>
  • 相关阅读:
    漫谈 IP 协议
    Git常用组合操作
    my questions of C#
    关于C#多态的思考
    设计模式:示例与思考
    C#环境搭建,以及C#编译器的使用
    网络模型和TCP协议族
    Understanding TCP/IP Network Stack
    Get on the CORBA
    Introduction to COBRA
  • 原文地址:https://www.cnblogs.com/rickyctbu/p/11437645.html
Copyright © 2011-2022 走看看