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