• PHP学习笔记07——字符串和正则


      1 <?php
      2     //1. PHP字符串下标,使用{}来访问对应位置的字符
      3     $str01 = "abcdef";
      4     echo $str01{1}."<br/>";
      5     
      6     //2. 常用字符串输出函数
      7         /* echo        效率较高,输出多个字符串用逗号隔开
      8          * print    效率较低,错误时会返回0
      9          * die        输出后退出,如果是字符串,退出前输出,如果是0~254的整数,作为退出状态码
     10          * printf    格式化输出
     11          * sprintf    格式输出到字符串,返回字符串
     12          */
     13     echo "I", " am", " echo", "<br/>";
     14     $a = 123;
     15     printf("printf %x<br/>", $a);
     16     $str01 = sprintf("sprintf %x<br/>", $a);
     17     print $str01."<br/>";
     18     
     19     //3. 常用字符串的格式化函数
     20         /* ltrim,rtrim,trim            去除字符串左边/右边/两边的空白字符或预定义字符,当第二个参数指定时为删除预定义字符,可以使用..去掉一个范围
     21          * str_pad                    把字符串填充新的长度,参数二指定长度,参数三指定填充字符,默认空格,参数四指定填充方向
     22          *                             (STR_PAD_BOTH,STR_PAD_LEFT,STR_PAD_RIGHT),默认STR_PAD_RIGHT
     23          * strtolower,strtoupper    转换所有字符为小写/大写
     24          * ucfirst, ucwords            字符串首字母大写,字符串中所有单词首字母大写
     25          * nl2br                    在字符串/n前加<br/>            
     26          * htmlspecialchars            转换html字符($"'<>),第二个参数可选(ENT_COMPAT只转双引号,ENT_QUOTES都转换,ENT_NOQUOTES不转换),
     27          *                             第三个参数可选,指定编码,默认ISO88511-1
     28          * htmlentities                将所有的非ASCII码字符转换为对应的实体代码,和上面一个函数用法一致,能转换的字符更多
     29          * stripslashes                去掉
     30          * strrev                    字符串反转
     31          * number_format            格式化为分隔符表示字符串,第二个参数可选表示小数点后几位,第三个参数可选表示小数点符号,第四个参数可选表示分隔符
     32          * md5                        md5加密字符串
     33          */
     34     $str02 = "        aaa ";
     35     echo strlen($str02)."  ".strlen(trim($str02))."<br/>";
     36     $str03 = "av123DC32AD149zz";
     37     echo trim($str03, "0..9a..z")."<br/>";        //删除两侧所有小写字母和数字
     38     
     39     $str04 = "xax";
     40     echo str_pad($str04, 10)."<br/>";
     41     echo str_pad($str04, 10, "=")."<br/>";
     42     echo str_pad($str04, 10, "=", STR_PAD_BOTH)."<br/>";
     43     
     44     echo strtolower($str03)."  ".strtoupper($str03)."<br/>";
     45     
     46     $str05 = "hello world";
     47     echo ucfirst($str05)." == ".ucwords($str05)."<br/>";
     48     
     49     echo nl2br("nihao
    zhonguo
    ");
     50     
     51     $str06 = "&<a'bb'是a>";            //直接echo这个字符串在浏览器中无法正常显示
     52     echo "old: ".$str06." new: ".htmlspecialchars($str06,ENT_QUOTES,"gb2312")."<br/>";
     53     echo "old: ".$str06." new: ".htmlentities($str06,ENT_QUOTES,"gb2312")."<br/>";
     54     
     55     $str07 = 'nihao"zhonguo
    ';    //去掉\,在上传表单时php会给特殊字符前自动加\,这时如果要输出会用到
     56     echo $str07."  ".stripslashes($str07)."<br/>";
     57     
     58     echo strrev("abcd")."<br/>";
     59     
     60     echo number_format("123123123.123", 2)."<br/>";
     61     echo number_format("123123123.123", 2, "=", "|")."<br/>";
     62     
     63     echo md5("abcd")."<br/>";
     64     echo "<br/>";
     65     
     66     //4. 字符串比较函数
     67         /* strcmp            字节序比较字符串
     68          * strcasecmp        忽视大小写字节序比较字符串
     69          * strnatcmp        自然序比较字符串,自然序在前面数组排序章节有介绍
     70          * strnatcasecmp    忽视大小写自然序比较字符串
     71          * */
     72     echo strcmp("file2", "file11")."<br/>";
     73     echo strnatcmp("file2", "file11")."<br/>";
     74     echo "<br/>";
     75     
     76     //5. 其他常用字符串函数
     77         /* strstr        在一个字符串中查找另一个字符串,返回从匹配点开始的剩余部分,找不到返回false
     78          * strpos        同上,返回第一次出现的位置,找不到返回false
     79          * strrpos        返回最后一次出现的位置
     80          * substr        返回字符串的一部分
     81          * str_replace    将参数三字符串中的参数一字符串替换成参数二字符串.参数一和参数二都可以是数组,对应位置替换,见例子.
     82          * str_ireplace    同上,只是忽视大小写
     83          * explode        用某个特定的字符分割字符串,第一个参数字符串表示使用的分割符集合,第二个参数分割的串,第三个可选,表示分割多少个
     84          * implode        用特定的连接符连接多个字符串
     85          */
     86     echo strstr("bbcabcab", "ab")."<br/>";
     87     echo strpos("bbcabcab", "ab")."<br/>";
     88     echo strrpos("bbcabcab", "ab")."<br/>";
     89     echo substr("bbcabcab", 3, 4)."<br/>";
     90     echo str_replace("ab", "hh", "bbcabcab")."<br/>";
     91     echo str_replace(array("a", "b"), array("A", "B"), "bbcabcab")."<br/>";
     92     print_r(explode("a", "bbcabcab"));
     93     echo "<br/>";
     94     print_r(implode("+", array("aa", "bb", "cc")));
     95     echo "<br/><br/>";
     96     
     97     //6. 正则表达式
     98         /* PHP正则表达式简介——PHP提供两套正则库,Perl兼容的preg_系函数,POSIX兼容的ereg_系函数,以下主要介绍preg_系列的正则函数
     99          * 正则表达式的语法规则——分为定界符,原子,元字符和模式修正符
    100          * 定界符:包含模式串的字符,一般用/,其实除了和数字字母都可以用
    101          * 原子:
    102          *     字符            包括普通字符和特殊字符,以及非打印字符等,除普通字符都要加转义字符
    103          *  自定义原子表    [abc]表示a,b,c中选一个,[0-9]表示0-9中的一个
    104          *     通用字符类型    d[0-9],D[^0-9],s[f
    
    	v],S[^f
    
    	v],w[0-9a-zA-Z],W[^0-9a-zA-Z]
    105          * 元字符:
    106          *     *,+,?            分别代表重复(0、1、多次)/(1、多次)、(0、1次)
    107          *     {n},{n,},{n,m}    分别代表前面原子重复(n次)/(不少于n次)、(n~m次)
    108          *     ^或A $或        分别代表匹配字符串开头/匹配字符串结尾
    109          *      B            分别代表匹配单词的边界/单词边界以外的部分
    110          *     .                代表匹配换行符以外的任意一个字符        
    111          *     |                代表或操作
    112          *     [] [^]            匹配方括号中任意一个原子/方括号以外的任意一个字符
    113          *     ()                匹配括号内整体为一个原子,注意每个括号会成为一个缓冲区,可以使用x访问第x个缓冲区(在正则中要写作\x)
    114          * 模式修正符: (在表达式边界符之外使用)
    115          *     i        不区分大小写
    116          *  m        视为多行,也就是说^可以匹配每一行的开头,$符号屁屁每一行结尾
    117          *  x        模式中的空白忽略不计,除非已经被转义
    118          *  s        .将能匹配所有字符,包括换行符
    119          *  e        在preg_replace函数中如果模式串加了e,替换的串将作为php表达式求值后替换
    120          *  U        
    121          *  D        $仅匹配结尾,无此选项使如果最后一个字符是换行符会被忽略.如果设定了m该选项被忽视
    122          */
    123         
    124         /* 字符串的匹配与查找
    125          * preg_match         前两个参数分别是模式串和匹配串,第三个数组参数用于保存结果,其中[0]表示匹配内容,接下来依次储存了每个小括号里匹配的内容
    126          * preg_match_all    与第一个不同的是会匹配多组直到字符串结束,第四个参数指定模式,PREG_PATTERN_ORDER是[0]保存所有匹配内容,接下来
    127          *                     依次储存每个小括号保存所有内容,PREG_SET_ORDER是以[0]为第一组匹配结果,类推.
    128          * preg_grep        匹配数组,返回能够成功匹配的数组单元
    129          */
    130     $pattern = '/(https?|ftps?)://(www).([^./]+).(com|net|org)(/[w./?\%&=]*)?/i';
    131     $matstr01 = "网址http://www.baidu.com/index.php是百度,网址http://www.google.com/index.php是谷歌,
    132             网址http://www.kingsoft.org是金山";
    133     if (preg_match($pattern, $matstr01, $matches)) {
    134         echo $matches[0]."<br/>";
    135         for ($i = 1; $i < count($matches); $i++){
    136             echo $matches[$i]."<br/>";
    137         } 
    138     }
    139     echo "<br/>";
    140     
    141     if (preg_match_all($pattern, $matstr01, $matches, PREG_SET_ORDER)) {
    142         foreach ($matches as $grp) {
    143             foreach ($grp as $value) {
    144                 echo $value."<br/>";
    145             }
    146         }
    147     }
    148     echo "<br/>";    
    149     
    150     $array = array("aa", "AAA", "AaA", "BBB");
    151     print_r(preg_grep('/^[A-Z]+$/', $array));
    152     echo nl2br("
    
    ");
    153     
    154         /* 字符串的替换
    155          * preg_replace        根据第三个参数在字符串中搜索并替换为第二个参数,第四个参数表示替换个数,-1或者不写代表替换所有
    156          *                     第二个参数可以使用反向引用,注意这里最好使用${i}的形式
    157          *                     匹配式+e后将对替换式进行求值替换
    158          */
    159     $pattern = '/(d{2})/(d{2})/(d{4})/';
    160     $matstr02 = "10/01/2012 - 10/07/2012";
    161     echo preg_replace($pattern, "\3-\1-\2", $matstr02)."<br/>";
    162     echo preg_replace($pattern, "${3}1-${1}-${2}", $matstr02)."<br/>";
    163     
    164     $patterne = '/(d{2})/(d{2})/(d{4})/e';        //加了e后将把第二个字符串作求值运算
    165     echo preg_replace($patterne, "\3-\1-\2", $matstr02)."<br/>";
    166     echo "<br/>";
    167     
    168         /* 字符串的分割
    169          * preg_split    根据第二个模式串参数分割第一个字符串,第三个参数表示分割个数,第四个参数设置如下标记,可多选
    170          *                 (PREG_SPLIT_NO_EMPTY,只返回非空成员,PREG_SPLIT_DELIM_CAPTURE,定界符模式中的括号表达式也会被捕获并返回
    171          *                 PREG_SPLIT_OFFSET_CAPTURE,对每个出现的匹配结果同时返回偏移量,这改变了数组的结构)
    172          */
    173     $matstr03 = "hello, world, !";
    174     $keywords = preg_split("/[s,]+/", $matstr03, -1, PREG_SPLIT_NO_EMPTY);
    175     foreach ($keywords as $value) 
    176         echo $value."<br/>";
    177     
    178     $keywords = preg_split("/[s,]+/", $matstr03, -1, PREG_SPLIT_OFFSET_CAPTURE);
    179     foreach ($keywords as $value)
    180         echo $value[0]."  ".$value[1]."<br/>";
    181     
    182 
    183 ?>

    执行结果

    b
    I am echo
    printf 7b
    sprintf 7b
    
    12 3
    DC32AD
    xax 
    xax=======
    ===xax====
    av123dc32ad149zz AV123DC32AD149ZZ
    Hello world == Hello World
    nihao
    zhonguo
    old: & new: &<a'bb'是a>
    old: & new: &<a'bb'是a>
    nihao"zhonguo
     nihao"zhonguon
    dcba
    123,123,123.12
    123|123|123=12
    e2fc714c4727ee9395f324cd2e7f331f
    
    1
    -1
    
    abcab
    3
    6
    abca
    bbchhchh
    BBcABcAB
    Array ( [0] => bbc [1] => bc [2] => b ) 
    
    aa+bb+cc
    
    http://www.baidu.com/index.php
    http
    www
    baidu
    com
    /index.php
    
    http://www.baidu.com/index.php
    http
    www
    baidu
    com
    /index.php
    http://www.google.com/index.php
    http
    www
    google
    com
    /index.php
    http://www.kingsoft.org
    http
    www
    kingsoft
    org
    
    Array ( [1] => AAA [3] => BBB ) 
    
    2012-10-01 - 2012-10-07
    20121-10-01 - 20121-10-07
    2001 - 1995
    
    hello
    world
    !
    hello 0
    world 7
    ! 14
  • 相关阅读:
    取2个日期间的天数
    C#代码与JAVASCRIPT函数的相互调用
    ASP.NET验证码(3种)
    VS2008自带SQL 2005如何使用
    文本框默认有一个值,然后鼠标点上去那个值就清空
    远程桌面连接会话超时或者被限制改组策略也没用的时候就这么解决
    关于CComboBox的使用,编辑项的文字
    vc 剪切板 unicode
    Linux 防火墙、SELinux 的开启和关闭
    MSSQLSERVER服务不能启动
  • 原文地址:https://www.cnblogs.com/swm8023/p/3229014.html
Copyright © 2020-2023  润新知