首页 >后端开发 >php教程 >PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)

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

高洛峰
高洛峰原创
2016-12-22 13:57:271130浏览

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

Demo1.php

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

Demo2.php

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

Demo3.php

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

Demo4.php

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

Demo5.php

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

Demo6.php

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

Demo7.php

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

Demo8.php

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

Demo9.php

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

Demo10.php

<?php
 //搜索匹配的结果,然后替换掉
 //第一个参数,存的是正则模式
 //第二参数,放的是替换掉的字符串
 //第二个参数,字符
 //将第三个参数的字符串的 php5,php6 替换成了 oneStopWeb
 echo preg_replace(&#39;/php[1-6]/&#39;,&#39;oneStopWeb&#39;,&#39;This is a php5,This is a php6&#39;);
 //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 = &#39;/(\[b\])(.*)(\[\/b\])/U&#39;;//U 禁止贪婪
 $replace = &#39;<strong>\2</strong>&#39;;
 $string = &#39;This is a [b]php5[/b],This is a [b]php6 [/b]&#39;;
 //echo $string;
 echo preg_replace($mode,$replace,$string);
?>

Demo12.php

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

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


更多PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)相关文章请关注PHP中文网!


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn