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\nzhonguo\n");
 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\n';    //去掉\,在上传表单时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\n\r\t\v],\S[^\f\n\r\t\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 $或\Z        分别代表匹配字符串开头/匹配字符串结尾
109          *     \b \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("\n\n");
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\n 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

 

posted @ 2013-07-31 22:58  Burn_E  阅读(498)  评论(0)    收藏  举报