[Monkey's PHP教程] 第七章 宏替换函数
From:http://lesson.phpso.com/article.php?1458.html
宏替换函数完全利用了正则表达式的规则,因此也可以称为正则表达式函数。
preg_replace:
函数格式:mixed preg_replace(mixed pattern, mixed replacement, mixed string);
这个函数会使用将string中符合表达式pattern的字符串全部替换为表达式replacement。如果replacement中需要包含pattern的部分字符,则可以使用”()”来记录,在replacement中只是需要用”\1″来读取。
举例:
1〉〉普通的字符串替换
echo preg_replace(“'你'”, “我”, “你好啊!”);
普通的替换建议直接用str_replace,这样速度比preg_replace速度快。
2〉〉 把字符串转换为“%”加十六进制的HTML模式
echo preg_replace(“#(.)#e”, “'%'.DecHex(Ord('\\1'))”, “你好啊”);
显示结果为:%c4%e3%ba%c3%b0%a1
3〉〉 把“%”加十六进制的HTML字符串改为普通字串
$text=”%c4%e3%ba%c3%b0%a1″;
echo preg_replace(“#%([0-9A-Za-z][0-9A-Za-z])#e”,”Chr(HexDec('\\1')) “,$text);
或者
echo preg_replace(“#%([0-9A-Za-z][0-9A-Za-z])#e”,
“Chr(base_convert('\\1',16,10)) “,$text);
显示结果为:你好啊
4〉〉 转换论坛帖子中输入的Email地址为链接
$text = preg_replace(“#^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$#”,
“\\0“, $text);
5〉〉 转换论坛帖子中输入的网址为链接
$text = preg_replace(“#[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]#”,
“\\0\\0\”>\\0“, $text);
6〉〉 自定义脚本
function do_value($a)
{
if ($a=='c_name') {$ret = “李红痣”;}
if ($a=='i_age') {$ret = “14”;}
return $ret;
}
$text = <<
您的年龄为:
EOF;
$text = preg_replace( “#\#e” , “do_value(\\1)”, $text);
echo $text;
显示结果为:
您的名称为:李红痣
您的年龄为:14
7〉〉 去掉论坛帖子中所有的HTML标记
$search = array (
“''si”,”'<[\/\!]*?[^<>]*?>'si”,”'([\r\n])[\s]+'”,”'&(quot|#34);'i”,”'&(amp|#38);'i”,”'&(lt|#60);'i”,”'&(gt|#62);'i”,”'&(nbsp|#160);'i”,”'&(iexcl|#161);'i”,”'&(cent|#162);'i”,”'&(pound|#163);'i”,”'&(copy|#169);'i”,”'&#(\d+);'e”);
$replace = array (
“”,””,”\\1″,”\””,”&”,”<",">“,” “,chr(161),chr(162),chr(163), chr(169), “chr(\\1)”);
$text = preg_replace ($search, $replace, $document);
preg_match :
函数格式:int preg_match(string pattern, string subject, array [matches]);
这个函数会在string中使用pattern表达式来匹配,如果给定了[regs],就会将string记录到[regs][0]中,[regs][1]代表使用括号”()”记录下来的第一个字符串,[regs][2]代表记录下来的第二个字符串,以此类推。preg如果在string中找到了匹配的pattern,就会返回”true”,否则返回”false”。
宏替换的利用,数据类库
类库同时支持MySQL、MSSQL、Access,运用宏替换函数,采用自己定义脚本的方式进行方便的数据访问。
从一个选择题的例子开始,慢慢的深入用新的数据类库进行的,动态网页制作的方法。
数据库类型:ACCESS数据库文件名称:db.mdb
首先在类库文件中指定用ACCESS方法并设定好db.mdb
深入1:
require('db_class.php'); //引用类库
DB_Table(“questiongstr”,””,$result); //打开题库表格
for ($i=0;$i
echo $result[$i]['question'].”
“; //显示问题
}
?>
新的数据函数中 DB_Table() 为打开数据库表格,第一个参数为数据库表名称;第二个参数为SQL SELECT子句引用如“where”子句或者“order by”子句等等;第三个参数为返回值,返回值为二唯数组。
直接用PHP的查看数组条目函数count即可返回结果的记录数。直接调用相应的二唯数组即可得到相应的值。
深入2:
require('db_class.php');
$MCS=”
选项:
“; //按照自定脚本格式设定字符串
DB_Table(“questiongstr”,””,$result);
for ($i=0;$i
DB_mc_show($MCS,'show',$i,$result); //读取脚本显示内容
}
?>
直接利用宏替换函数的特性自定义了脚本,设定在字符串$MCS中,并用DB_mc_show() 函数解析此字符串。
DB_mc_show()函数第一个参数为自定义脚本字串;第二个参数表示解析后的字符串如何利用是“get”还 是“show”;第三个参数引用当前的循环变量作为内部调用二唯数组;第四个及以后的参数为引用脚本所涉及的二唯数组资料。