PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)

5年以前  |  阅读数:303 次  |  编程语言:PHP 

本文实例讲述了PHP正则表达式基本用法。分享给大家供大家参考,具体如下:

Demo1.php


    <?php
     //尝试着写第一个正则表达式
     //第一个参数,表示模式(就是和字符串去比较,匹配)
     //第二个参数,表示字符串
     //如果整个函数模式和字符串比较后匹配了,那么返回真(true)1,否则返回假(false)0
     //什么叫匹配,就是一个一个的比较过去
     //按照什么规则??按照模式来匹配
     //只要模式全部通过,那么就通过
     //匹配和相等是两个概念
     //因为目前的模式是一个整体,php
     //所以,字符串只要有连在一起的 php 三个字符,不管怎样的字符串都能匹配
     $mode = '/php/'; //规则模式
     $string = 'fsdfsdfsdphpfsdfs'; //字符串
     //echo preg_match($mode,$string);
     if( preg_match($mode,$string)){
     echo '匹配';
     }else{
     echo '不匹配';
     }
     //echo preg_match('/php/','php');
    // if('a'=='a'){
    // echo '相等';
    // }else {
    // echo '不相等';
    // }
    ?>

Demo2.php


    <?php
     //什么叫前导,前面的一个字符
     //+ 号的前导字符就是 h
     //h+ 的意思是,至少包含一个 h
     //+ 号的意思
     //$mode = '/ph+p/'; //规则模式
     //h* 的意思是,零个或者多个 h
     //* 号虽然可以是零个,但是前导字符不能更改,更改了,就不匹配了
     //$mode = '/ph*p/'; //规则模式
     //h? 的意思是,零个或者一个 h
     //? 多个前导字符不行
     //$mode = '/ph?p/'; //规则模式
     //.的意思是,任意一个字符,所以,两个点,就是任意两个字符
     //$mode = '/p.p/'; //规则模式
     //.* 表示前导任意字符,并且零个或者多个
     //$mode = '/p.*p/'; //规则模式
     //h{3} 表示,前导必须是3 个,
     //$mode = '/ph{3}p/'; //规则模式
     //h{3,5}表示,前导必须是 3 到 5 个
     //$mode = '/ph{3,5}p/'; //规则模式
     //h{3,} 表示,前导至少 3 个 h
     //$mode = '/ph{3,}p/'; //规则模式
     //$符号,一般加在模式的字符串尾巴上
     //表示从尾巴开始匹配
     //$mode = '/php$/'; //规则模式
     //^表示,从开头进行匹配
     //$mode = '/^php/'; //规则模式
     //^ 和 $ 一起用的,基本上不要用正则了,直接用 == 号即可
     //$mode = '/^php$/'; //规则模式
     //| 是一个条件选择符,如果有其中一个,即可匹配。
     //$mode = '/php|asp/'; //规则模式
     //()
     $mode = '/(this) (is) (php|asp)/'; //规则模式
     $string = 'this is php'; //字符串
     //echo preg_match($mode,$string);
     if( preg_match($mode,$string)){
     echo '匹配';
     }else{
     echo '不匹配';
     }
    ?>

Demo3.php


    <?php
     //元子符
     //[]中括号,是一种正则里的语法
     //里面的东西表示任意一个即可
     //[a-z] 表示 26 个字母中,随便其中一个
     //$mode = '/[a-z]/'; //规则模式
     //[0-9] 表示 0-9,随便其中一个
     //$mode = '/[0-9]/'; //规则模式
     //[asv] 其中一个
     //$mode = '/[asv]/'; //规则模式
     //[a-zA-Z0-9_] 表示其中一个匹配 [a-zA-Z0-9_] 中的任意一个
     //$mode = '/[a-zA-Z0-9_]/'; //规则模式
     //不是在开头匹配行首的^,而是中括号里的 ^
     //[^] 表示匹配除了abc 外都能匹配的字符串
     //$mode = '/[^abc]/'; //规则模式
     //为了让人们使用更加的方便,\w 代表 [a-zA-Z0-9_]
     //$mode = '/[\w]/'; //规则模式
     //\W 正好和 \w相反
     //$mode = '/[\W]/'; //规则模式
     //\d 和 [0-9] 一样
     //$mode = '/\d/'; //规则模式
     //\D 和 [^0-9] 一样
     //$mode = '/\D/'; //规则模式
     //\s匹配任何空白字符
     //$mode = '/\s/'; //规则模式
     //\S不包含空白字符
     //$mode = '/\S/'; //规则模式
     //\b表示到达了单词的边界,如果没有到达就不匹配,边界可以理解为空格
     //$mode = '/php\b/'; //规则模式
     //\B 表示没有到达边界
     //$mode = '/php\B/'; //规则模式
     //因为 + 号是正则里的特殊字符
     //如果要匹配特殊字符的话,必须加上 \
     $mode = '/p\+p/'; //规则模式
     $string = 'p+p'; //字符串
     if( preg_match($mode,$string)){
     echo '匹配';
     }else{
     echo '不匹配';
     }
    ?>

Demo4.php


    <?php
     //修饰符
     //修饰符放在 // 的外面
     //i 表示不区分大小写
    // $mode = '/php/i'; //规则模式
    // $string = 'PHP'; //字符串
     //m 表示匹配首尾的时候,如果遇到换行,也应该承认是结尾
    // $mode = '/php$/m'; //规则模式
    // $string = "this is a php\n ,is goods"; //字符串
     //x 表示忽略掉规则模式中的空白字符
    // $mode = '/php/x'; //规则模式
    // $string = 'ph p'; //字符串
     //A 表示必须从头开始匹配
     $mode = '/php/A'; //规则模式
     $string = 'phpfsdfd'; //字符串
     if( preg_match($mode,$string)){
     echo '匹配';
     }else{
     echo '不匹配';
     }
    ?>

Demo5.php


    <?php
     //搜索数组中的相匹配的字符串
     //preg_grep() 函数
     $language = array('php','asp','jsp','python','ruby');
     //找出最流行的 3p 语言
     //这三门语言的匹配共同点是什么,最后结尾都是 p
     //结尾匹配 p /p$/
     //$mode = '/p$/';
     //打印出开头为 p 的语言
     $mode = '/^p/';
     //python 蟒蛇语言,在国外有取代 PHP 的传闻
     print_r(preg_grep($mode,$language));
    ?>

Demo6.php


    <?php
     //搜索模式,最后返回的是真或者是假,1,10
     echo preg_match('/php[1-6]/','php5');
    ?>

Demo7.php


    <?php
     //电子邮件的小案例
     //通过拆分的方法分组
     $mode = '/^([\w\.]{2,255})@([\w\-]{1,255}).([a-z]{2,4})$/';//模式不能缺少
     $string = 'oneStopWeb@163.com';
     if(preg_match($mode,$string)){
     echo '电子邮件合法';
     }else{
     echo '电子邮件不合法';
     }
    ?>

Demo8.php


    <?php
     //匹配全局正则
     //将字符串的所有匹配得到的结果放到一个数组变量里
     preg_match_all('/php[1-5]/','php5fsdfsdphp6fsdfsdfphp4',$out);
     print_r($out);//Array ( [0] => Array ( [0] => php5 [1] => php4 ) )
     echo $out[0][0];//php5
    ?>

Demo9.php


    <?php
     //定界定则
     echo preg_quote('PHP is $150'); //PHP is \$150
    ?>

Demo10.php


    <?php
     //搜索匹配的结果,然后替换掉
     //第一个参数,存的是正则模式
     //第二参数,放的是替换掉的字符串
     //第二个参数,字符
     //将第三个参数的字符串的 php5,php6 替换成了 oneStopWeb
     echo preg_replace('/php[1-6]/','oneStopWeb','This is a php5,This is a php6');
     //This is a oneStopWeb,This is a oneStopWeb
    ?>

Demo11.php


    <?php
     //贪婪和分组获取的案例,ubb
     //我要将这个 [b][/b] 换成 <strong></strong>
     //注意一个问题,这个时候的 [] 中括号,是字符串的括号,而不是语法[a-z]
     //. 表示匹配任意字符一个,加上一个 * 号表示匹配零个或者多个
     //用括号分为三组,那么第一组就是\1,第二组就是\2,第三组就是\3
     //目前只有1 组,\1
     //第一问题,第一个[b]和最后一个[/b]匹配了
     //解决贪婪匹配。
     $mode = '/(\[b\])(.*)(\[\/b\])/U';//U 禁止贪婪
     $replace = '<strong>\2</strong>';
     $string = 'This is a [b]php5[/b],This is a [b]php6 [/b]';
     //echo $string;
     echo preg_replace($mode,$replace,$string);
    ?>

Demo12.php


    <?php
     //用正则表达来进行分割
     //如果没有 [] 符号,就表示,要同时满足
     print_r(preg_split('/[.@]/','oneStopWeb@163.com'));
     //Array ( [0] => oneStopWeb [1] => 163 [2] => com )
    ?>

PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:

JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript

正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php正则表达式用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例