第四章:字符串操作与正则表达式
<? /*第四章 字符串操作与正则表达式*/ /*4.1创建一个智能表单邮件*/ echo "<a href=\"feedback.html\">点击此处进入该页面</a>"; echo "发送失败了,配置问题。"; /*字符串的格式化 chop();ltrim();trim();rtrim(); */ $a=" 111 <55>"; $b=" 111 <55> "; echo $a; echo "<br />这是末尾没有空格的格式化之后是这样".trim($a,"<55>");//注:只能去掉开头和结尾的东西 echo "<br />这是末尾有空格的格式化之后是这样".trim($b,"<55>");//注:只能去掉开头和结尾的东西,有空格就不管用了 //ltrim();只去掉左边 //rtrim();只去掉左边,chop()为rtrim()的别名 /*4.2.2格式化字符串以便于显示nl2br()*/ $name="Kevin"; $mail="436081860@qq.com"; $feedback="very good"; $mailcontent=$name."\n".$mail."\n".$feedback."\n"; echo $mailcontent; echo nl2br($mailcontent); $c=array(1,2); /*print($c);//不能打印数组*/ $d=20; //print($e); echo (print($d)); //echo $e; //print($e); /*printf和sprintf*/ $e=26.32999; echo "<br />这本书的价格是¥$e"."。<br />"; printf("这本书的价格是¥%s。<br />",$e); printf("%%这本书的价格为¥%.2f<br />",$e); printf("打印前面3个空格左对齐的第三个参数保留三位小数点:%3\$'3 6.3f",$a,$b,$e); printf("打印前面3个空格左对齐的第三个参数保留三位小数点:%3\$'6-10.3f",$a,$b,$e);//向左靠齐时才会填充3,有些type没搞明白s字符串 f双精度 /*字符串的大小写*/ $f="hello,world!I'm a new soul!"; echo "<br />".strtoupper($f)."<br>".strtolower($f)."<br>".ucfirst($f)."<br>".ucwords($f)."<br>"; /*奇怪的是加了中文英文逗号的,竟然没有大写?*/ /*格式化字符串以便于储存*/ $g="\"哈哈!\""; echo $g."<br />"; echo addslashes($g); /*4.3使用函数链接和分割字符串*/ /*4.3.1explode(),implode(),join()*/ //print_r($email); $email="436081860@qqlUhao.com"; $email_array=explode('@',$email); //print_r($email_array); if(strtolower($email_array[1])=='qqluhao.com'){ echo "1"; }else{ echo "0"; } /*将数组的元素组成新的字符串join()是implode()函数的别名*/ $email_array[3]="3"; $new_email_array=implode('@',$email_array); echo strtolower($new_email_array); $new_email_array2=join('@',$email_array); echo $new_email_array2; echo "<br />"; /*4.3.2使用strtok函数*/ $string = "abcd efgh igkelmn opeq ers e e t"; echo "$string<br />"; $str=explode("e",$string); foreach($str as $v){ echo "($v)"; } echo "-------------<br />"; $string2 = "rrrrrdrr rrrrbrbrbrbbrbrb"; $str2 = strtok($string2, " d"); $n=1; while ($str2 !== false) { echo "($str2)"; $str2 = strtok("r"); } echo "-------------<br />"; //上面的意思是先把string2从左到右读,碰到的第一个分割字符(d)就停止,后面的循环是按照(r)来切割的。 $string3="aaaaaaabcbcbcbcbbcbddddddod"; $str3=strtok($string3,"bcdef");//第一次切,实际上只执行了b while($str3!==false){ echo "($str3)"; $str3=strtok("o");//分割后面的o,结果应该是三个括号 } //使用for来遍历 echo "<br>"; $string4="aaaaobbbboccccoddddo"; for($i=strtok($string4,"o");$i!==false;$i=strtok("o")){ echo "($i)"; } echo "<br />"; //使用for来遍历string3【推荐用法】 for($i=strtok($string3,"bcdef");$i!==false;$i=strtok("o")){ echo "($i)"; } /*使用substr()函数*/ $test="Your customer service is excellent."; echo substr($test,1,-2);//第三个元素如果为正数就是长度,如果为负数,就是从末尾数的数值。 /*字符串的比较*/ $h="abcdefg"; $i="Abcdefg"; $j="abc"; $k="123456"; $l="23456"; echo "<br />"; echo strcmp($h,$i);//比较最严格 echo strcmp($h,$j); echo strcasecmp($h,$i);//忽略大小写 echo strcasecmp($k,$l); echo strnatcmp($h,$l);//按照自然排序 echo strnatcmp($k,$l); /*字符串的长度*/ $m="howroad"; echo "<br />howroad的长度为".strlen($m);//一般的作用就是来判断 /*字符串的匹配和替换*/ $teststr="it's very good.i very like it.i want BUY more.BUY moremore"; echo (strstr($teststr,"good") ? "有" :"无") ; echo (strstr($teststr,"buy") ? "有" :"无") ; echo (stristr($teststr,"buy") ? "有" :"无") ; echo strrchr($teststr,"BUY"); /*查找字符串的位置*/ echo strpos($teststr,"good"); echo strpos($teststr,"o"); echo strpos($teststr,"o",12); echo "<br />".strrpos($teststr,"o",12); //假如搜索不到 echo @strpos($testpos,'aaaaa'); echo $php_errormsg; //对比两个判断 if(strstr($teststr,'aaaaa')==0){echo "不存在";} if(strstr($teststr,'i')==0){echo "存在";} //有漏洞,应使用恒等于 if(strstr($teststr,'aaaaa')===false){echo "不存在";} if(strstr($teststr,'i')==0){echo "存在";} /*替换*/ /* str_replace(); substr_replace(); */ $offset=array("fuck","bitch","dick","cock"); $teststr="you son of bitch,fuck you ,you are dick!"; print_r(str_replace($offset,'******',$teststr,$i));//哈哈哈哈哈成功 echo $i;//显示一共替换了几处 echo substr_replace($teststr,"(没有全部替换)",0,-1); echo substr_replace($teststr,"(全部替换了)",0,10000); /*4.6正则表达式*/ //正则表达式是用来检索、替换那些符合某个模式(规则)的文本。 /*4.6.2*/ /* [a-z][A-Z][a-zA-Z][^a-z][aeiou] */ echo(preg_match('/[a-z]$|[0-9]$/',"1o1")==true? "符合" : "不符合"); /*4.6.3重复*/ //*表示 这个模式可以被重复0或者更多次 //+表示 这个模式可以被重复1或者更多次 /*4.6.4子表达式*/ //类似于这种(very )*large //for example ^bob,com$,^[a-z]$, /*4.6.7分支*/ //| means or //for example com|net|cn /*4.6.8匹配特殊字符*/ //实例 echo "\\ <br />"; $ii="\$"; echo(preg_match("/[\\$]/",$ii)==true?"符合":"不符合"); //in the 正则表达式,双引号之中的特殊字符需要三个反斜杠\\\ /*4.6.9特殊字符一览表*/ /*4.6.10在智能表单中的应用*/ //使用正则表达式对电子邮箱中的地址标准格式进行编码 //^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-]+$ /*4.7用正则表达式来查找字符串(这是正则表达式的主要应用)*/ $email="436081860@qq.com"; echo "<br />"; if(preg_match('/^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/',$email)==true){ echo "符合格式"; }else{ echo "不符合格式"; } /* ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃★★★★★特大喜讯★★★★ ┃ ┃本单元所学的正则表达式在PHP更新到5.3之后就不建议使用了! ┃ ┃要重新学习PCRE格式比较好,MLGBD! ┃ ┃http://php.net/manual/zh/book.pcre.php ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 1.PCRE 函数需要模式以分隔符闭合。 2.不像POSIX,PCRE 扩展没有专门用于大小写不敏感匹配的函数。取而代之的是,支持使用i (PCRE_CASELESS) 模式修饰 符完成同样的工作。 其他模式修饰符同样可用于改变匹配策略。 3.POSIX 函数从最左面开始寻找最长的匹配,但是 PCRE 在第一个合法匹配后停止。如果字符串 不匹配这没有什么区别,但 是如果匹配,两者在结果和速度上都会有差别。 为了说明这个不同, 考虑下面的例子(来自Jeffrey Friedl 的《精通正则 表达式》一书)。 使用模式 one(self)?(selfsufficient)? 在字符串oneselfsufficient 上匹配,PCRE 会匹配到o neself,但是使用 POSIX,结果将是整个字符串 oneselfsufficient。 两个子串都匹配原始字符串,但是 POSIX 将 最 长的作为结果。 */ //echo phpinfo();是5.5版本的。。。 //补充正则表达式{8}标识循环8次 ?>
<html> <head> <title>Bob's Auto Parts - Customer FeedBack</title></head> <body> <h1>Customer Feedback</h1> <h2>Please tell us What you think.</h2> <form method="post" name="Feedbackform" action="processfeedback.php"> Your name:<br /> <input name="name" /><br /> Your Email address:<br /> <input name="email" /><br /> Your feedback:<br /> <textarea name="feedback" rows="8" cols="40" wrap="virtual" /></textarea><br /> <input type="submit" name="submit" value="Send feedback" /> </form> </body> </html>
<? $name=$_POST['name']; $email=$_POST['email']; $feedback=trim($_POST['feedback'],"222"); /*email的配置*/ //以上代码没有正确运行,应该是php配置问题 $toaddress="kknn2@vip.qq.com"; $mailcontent=$name.$email.$feedback; $subject="Feedback from website."; $fromaddress="From:436081860@qq.com"; //mail($toaddress,$subject,$mailcontent,$fromaddress); echo "Your feedback has been sent."; //以上代码没有正确运行,应该是php配置问题 echo "$name $email $feedback"; ?>