分享

php正则表达式1、2、3

 英昌知识汇聚馆 2011-11-17
regular1.php:
<?php

      //尝试着写第一个正则表达式
   
    //第一个参数,表示模式,表示匹配模式(就是和字符串去比较、匹配)
    //第二个参数,表示字符串
   
    //如果整个函数模式和字符串比较后匹配了,那么返回真(true)1,否则返回假(false)0

    //什么叫匹配,就是一个一个的比较过去

    //按照什么规则??按照模式来匹配
    //只要模式全部通过,那么就通过
   
    //匹配和相等是两个概念

    //因为目前的模式是一个整体,php
    //所以,字符串只要有连在一起的php三个字符,不管怎样的字符串都能匹配

    $mode = '/php/';   //规则模式
    $string = 'sdlkfjwehsdlfkjpsdlfkjshersidjflkspdf';   //字符串

    if (preg_match($mode,$string)) {
        echo '匹配';
    } else {
        echo '不匹配';
    }


   
//    if ('a'=='b') {
//        echo '相等';
//    } else {
//        echo '不等';
//    }

   
    //什么叫前导,前面的一个字符
    //+号的前导字符就是h

    //h+的意思是,至少包含一个h
    //+号的意思,是前导字符,一个或者多个
   
    //h*的意思是,零个或者多个h
    //*号虽然可以是零个,但是前导字符不能更改,更改了,就不匹配了
   
    //h?的意思是,零个或者一个h
    //?多个前导字符不行
   
    //.的意思是,任意一个字符,所以,两个点,就是任意两个字符
    //.*表示前导任意字符,并且零个或者多个
   
    //p{3}表示,前导必须是3个
    //p{3,5}表示,前导必须是3-5个
    //p{3,}表示,前导至少3个p
   
    //$符号,一般加在模式的字符串尾巴上
    //表示从尾巴开始匹配

    //^表示,从开头进行匹配

    //^和$一起用的,基本上不要用正则了,直接用==号即可

    //|是一个条件选择符,如果有其中一个,即可匹配。

    $mode = '/(This) (is) (a) (Teacher)/';   //规则模式
    $string = 'This is a Teacher';   //字符串

    if (preg_match($mode,$string)) {
        echo '匹配';
    } else {
        echo '不匹配';
    }
   
 
?>


regular2.php:
<?php

  /**
   * 正则表达式中的元字符:
   * [a-z] 匹配任何包含小写字母a-z的字符串.如果第一个匹配成功,则后面的就不进行匹配。结果为成功。
   * [A-Z] 匹配任何包含大写字母a-z的字符串
   * [0-9] 匹配任何包含数字0-9的字符串
   * [abc] 匹配任何包含小写字母a、b、c的字符串
   * [^abc] 匹配任何不包含小写字母a、b、c的字符串
   * [a-zA-Z0-9_] 匹配任何包含a-zA-Z0-9和下划线的字符串
   * \w 匹配任何包含a-zA-Z0-9和下划线的字符串
   * \W 匹配任何没有下划线和字母数字的字符串
   * \d 匹配任何数字字符,与[0-9]相同
   * \D 匹配任何非数字字符,与[^0-9]相同
   * \s 匹配任何空白字符
   * \S 匹配任何非空白字符
   * \b 匹配是否到达了单词边界。(代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。)
   * \B 匹配是否没有到达单词边界
   * \  匹配正则中的特殊字符
   */
 

      // [a-z] 表示将待比较的字符串逐个与模式进行匹配,只要有一个能匹配到模式中的,结果为成功
  $mode = '/[a-z]/';
   $string ='0i'; //也可以。先匹配s,如果匹配到,则结果为成功
  
  if ( preg_match($mode, $string)){
      echo '[]字母元素匹配成功';
  }else{
      echo '[]字母元素匹配失败';
  }
    echo '<br/>';
   
    // [0-9] 表示将待比较的字符串逐个与模式进行匹配,只要有一个能匹配到模式中的,结果为成功
  $mode = '/[0-9]/';
   $string ='bc1'; //也可以。依次匹配a b 1,如果1匹配到了,则结果为成功
  
  if ( preg_match($mode, $string)){
      echo '[]数字元素匹配成功';
  }else{
      echo '[]数字元素匹配失败';
  }
    echo '<br/>';
   
     // [abc] 表示将待比较的字符串逐个与模式进行匹配,只要有一个能匹配到模式中的,结果为成功
  $mode = '/[abc]/';
   $string ='db'; //也可以。依次匹配d b,如果匹配到,则结果为成功
   //$string  = db'   //成功
  if ( preg_match($mode, $string)){
      echo '[]abc元素匹配成功';
  }else{
      echo '[]abc元素匹配失败';
  }
    echo '<br/>';
   
    // \d与[0-9]功能相同
    $mode = '/\d/';
   $string ='bc9'; //也可以。依次匹配a b 1,如果1匹配到了,则结果为成功
  
  if ( preg_match($mode, $string)){
      echo '\d元素匹配成功';
  }else{
      echo '\d元素匹配失败';
  }
    echo '<br/>';
    // \b表示到达了单词的边界,如果没有到达,就不匹配。如果放在结尾,边界可以理解为结束或空格
    //如果\b放在最开始,代表单词的开始或空格
    $mode = '/\bphp/';
   $string ='my php is good'; //也可以。
  if ( preg_match($mode, $string)){
      echo '\b元素匹配成功';
  }else{
      echo '\b元素匹配失败';
  }
    echo '<br/>';
    // 如果要匹配特殊字符的话,必须在特殊字符前加上\进行转义
    $mode = '/ph\+p/';
   $string ='ph+p'; //也可以。
  if ( preg_match($mode, $string)){
      echo '\元素匹配成功';
  }else{
      echo '\元素匹配失败';
  }
    echo '<br/>';
?>

regular3.php:
<?php

  /**
   * 正则表达式中的修饰符:一般放在//的外面。
   *  i 完成不区分大小写的搜索
   *  m 在匹配首内容或尾内容时采用多行识别匹配
   *  x 忽略正则中的空白
   *  A 强制从头开始匹配
   *  U 禁止贪婪匹配,只跟踪到最近的一个匹配符结束
   */
  $mode = '/php/i';
   $string ='pHp'; //也可以。
    //$string ='pHpadadf'; //也可以。
  if ( preg_match($mode, $string)){
      echo 'i修饰符匹配成功';
  }else{
      echo 'i修饰符匹配失败';
  }
    echo '<br/>';
    //m 表示匹配首尾时,遇到换行,也应该承认是结尾。不太常用
    $mode = '/php/im';
   $string ="this is pHp\n is good"; //也可以。
    //$string ='pHpadadf'; //也可以。
  if ( preg_match($mode, $string)){
      echo 'm修饰符匹配成功';
  }else{
      echo 'm修饰符匹配失败';
  }
    echo '<br/>';
?>

regular4.php:
<?php

  /**
   *  函数应用:
   *  搜索字符串:preg_grep()函数搜索数组中的所有元素,返回由与某个模式匹配的所有元素组成的数组
   *  prge_match():函数在字符串中搜索模式,如果存在则返回true,否则返回false
   *  prge_replace:函数搜索到所有匹配,然后替换成想要的字符串返回出来。功能强大,常用
   * 
   */
  //假设找出结尾为p的三种编程语言
    $language = array('php','jsp','asp','python','ruby');
    //模式:结尾匹配p
    $mode = '/p$/';
    //模式:开头为p的模式
    //$mode = '/^p/';
    print_r (preg_grep($mode, $language));
    echo "<br/>";
   
    //电子邮件小案例
    $mode = '/([\w\.]{2,255})@([\w]{2,255}).([a-z]{2,4})/';
    $string = '13656891089s@139.com';
    if (preg_match($mode, $string)){
        echo '电子邮件合法';
    }else {
        echo '电子邮件不合法';
    }
    echo "<br/>";
    //匹配全局正则
    //将字符串的所有匹配得到的数组结果,放进第三个变量中
     preg_match_all('/php[1-6]/', 'php5adkafphp6kikikdphp4', $out);
     print_r ($out);
     echo $out[0][0];
     echo "<br/>";
     
     //搜索匹配的结果,然后替换掉。第1个对数为正则模式,第2个参数是要被替成的字符串,第3个参数为字符串
     echo preg_replace('/php[1-6]/', 'python', 'This is php5,This is php4');
     //上句输出结果为:  This is python,This is python
      echo "<br/>";
     
     //贪婪和分组获取的案例
     //在mode中,用几个括号,就表示分几组,那么第一组就是\1,第二组就是\2,第三组就是\3,...
     //问题:只匹配到第一个[b]和最后一个[/b],解决此问题需要在mode中加入U参数,来使与最近的配对。
     $mode = '/\[b\](.*)\[\/b\]/U';
     $replace ='<strong>\1</strong>';  // \1表示引用第一个括号的.*内容
     $string ='this is a [b]php5[/b],this is [b]php6[/b]';
     echo preg_replace($mode, $replace, $string);
     echo "<br/>";
     
     //用正则表达式来分割
     print_r(preg_split('/[\.@c]/', 'hyc@cmca.org.cn')) ;//表示按.或@或c符号来分割
?>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多