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程序设计有所帮助。

(0)

相关推荐

  • 关于php正则匹配汉字的方法介绍

    php正则匹配汉字! /^[\x{4e00}-\x{9fa5}]+$/u 以上这个正则表达式就是困扰了很多php程序员的匹配汉字的正则表达式 大家可能会觉得很简单,实际上不同编码,不同程序语言,都有些细微的出入,稍不注意就得不到正确的结果. 下面是utf-8编码的例子:$str = "汉字";if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {print("该字符串全部是中文");} else {

  • php中使用preg_match_all匹配文章中的图片

    preg_match_all 函数: int preg_match_all ( string pattern, string subject, array matches [, int flags] )执行一个全局正则表达式匹配在 subject 中搜索所有与 pattern 给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches 中.     搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始.   flags 可以是下列标记的组合(注意把 PREG_PATT

  • php小经验:解析preg_match与preg_match_all 函数

    正则表达式在 PHP 中的应用在 PHP 应用中,正则表达式主要用于:•正则匹配:根据正则表达式匹配相应的内容•正则替换:根据正则表达式匹配内容并替换•正则分割:根据正则表达式分割字符串在 PHP 中有两类正则表达式函数,一类是 Perl 兼容正则表达式函数,一类是 POSIX 扩展正则表达式函数.二者差别不大,而且推荐使用Perl 兼容正则表达式函数,因此下文都是以 Perl 兼容正则表达式函数为例子说明.定界符Perl 兼容模式的正则表达式函数,其正则表达式需要写在定界符中.任何不是字母.数

  • PHP函数preg_match_all正则表达式的基本使用详细解析

    了解正则表达式之前,须要掌握一些常用的正则表达式的基础知识,这些如果能记得最好记得,记不住须要用的时候能查到就行,就多个特殊字符,所以说正则表达式玩的就是特殊,具体大家可以查看更加细致的说明. preg_match_all函数具体说明大家可以查看PHP手册,本文运用 preg_match_all用于测试正则表达的效果. 实例代码: 复制代码 代码如下: $html = '<div id="biuuu">jb51.net</div><div id="

  • PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)

    前面我们已经学习了正则表达式的基础语法,包括了定界符.原子.元字符和模式修正 符.实际上正则表达式想要起作用的话,就必须借用正则表达式处理函数.本节我们就来介绍一下PHP中基于perl的正则表达式处理函数,主要包含了分割, 匹配,查找,替换等等处理操作,依旧是配合示例讲解,让我们开始吧. 和正则表达式一样,正则表达式处理函数不能够独立使用,而这必须相结合,才能够完成特定的功能.在前面我们也说过,基于perl的正则表达式要快于POXIS正则表达式处理函数,所以我们只介绍以preg开头的基于perl

  • php正则匹配文章中的远程图片地址并下载图片至本地

    使用php的正则表达式来实现: $content = '这里是文章内容,这里插入一张图片测试 <img src="XXXXXXXXXXXXXXXXXXXX">'; $content = stripslashes ( $content ); $img_array = array (); // 匹配所有远程图片 preg_match_all ( "/(src|SRC)=["|'| ]{0,}(http://(.*).(gif|jpg|jpeg|bmp|png

  • PHP用正则匹配form表单中所有元素的类型和属性值实例代码

    前言 最近工作中遇到一个需求,需要在正则匹配页面中,所有可能存在的 form 表单的元素,可能有 input,action,select,textarea等等所有可能的元素,本文给出一个代码示例.感兴趣的朋友们可以参考学习. 实例代码如下 假设页面 1.html 的网页源代码是: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>一个含有 form 表单

  • PHP正则匹配操作简单示例【preg_match_all应用】

    本文实例讲述了PHP正则匹配操作.分享给大家供大家参考,具体如下: <?php $str = <<< EOT <a href="www/app/a/2QRN7v" rel="external nofollow" > <div class="phonebg"> <img src="http://www/template9/yunqingjian/jianjie/68.jpg"

  • PHP中preg_match函数正则匹配的字符串长度问题

    项目中,用preg_match正则提取目标内容,死活有问题,代码测得死去活来. 后来怀疑PHP 的preg_match有字符串长度限制,果然,发现"pcre.backtrack_limit "的值默认只设了100000. 解决办法:ini_set('pcre.backtrack_limit', 999999999); 注:这个参数在php 5.2.0版本之后可用. 另外说说关于:pcre.recursion_limit pcre.recursion_limit是PCRE的递归限制,这个

  • 正则匹配密码只能是数字和字母组合字符串功能【php与js实现】

    本文实例讲述了正则匹配密码只能是数字和字母组合字符串功能.分享给大家供大家参考,具体如下: 密码要求: 1. 不能全部是数字 2. 不能全部是字母 3. 必须是数字和字母组合 4. 不包含特殊字符 5. 密码长度6-30位的字符串 /** * @desc get_pwd_strength()im:根据密码字符串判断密码结构 * @param (string)$mobile * return 返回:$msg */ function get_pwd_strength($pwd){ if (strle

  • php正则匹配html中带class的div并选取其中内容的方法

    本文实例讲述了php正则匹配html中带class的div并选取其中内容的方法.分享给大家供大家参考.具体分析如下: 先看一段html代码: 复制代码 代码如下: <div class="chartInfo">   <div class="line"></div>  <div class="tideTable">       <strong>潮汐表</strong>数据仅供参

  • PHP正则匹配图片并给图片加链接详解

    正则: 复制代码 代码如下: $newstext=preg_replace(preg_replace('/(<img[^>]+src\s*=\s*"?([^>"\s]+)"?[^>]*>)/im', '<a href="$2″>$1</a>', $newstext); 解说: 1.preg_replace和str_replace的区别: str_replace只是纯字符替换,而preg_replace才是正则替换

  • php preg_match_all结合str_replace替换内容中所有img

    采集回来的图片img标签中,有好多javascript脚本和无用的信息,必需过替换自己想要的,比如alt.先看看要过滤的内容,我随便复制出来: 复制代码 代码如下: sdfsdfsdf<img alt="3568df.com靓图" src="http://www.aaa.com/upimg /080330/120D1232295023X0.gif" src="http://www.eee.com/upimg/080330 /120D123229502

随机推荐