$str = '主要有以下几个文件:index.php, style.css, common.js';
//将目标字符串$str中的文件名替换后增加em标签
$patterns=array('/(\m+:)/','/\s*{(\w+\.\w+),}/','/\s*{(\w+\.\w+),}/','/\s*{(\w+\.\w+),}/');
$replace=array('\1','<em>$2</em>','<em>$3</em>','<em>$4</em>');
$str=preg_replace($patterns,$replace,$str);
echo $str;
汉子匹配不能用\w,并且你写的是\m,还用注意冒号是中文的冒号“:”,逗号也是中文的逗号。
此处不适合用数组匹配,因为还用处理中文。
即使按照数组来做匹配,下标是针对每个数组元素分别计算的,你从1-4显然是错误的。
改成 这样就OK了。
$patterns='/(\w+\.\w+)/'; $replace='<em>$1</em>'; $str=preg_replace($patterns,$replace,$str); echo $str;