求助,拆分字符的问题.详细点击进入>>> 本帖最后由 luyinhu 于 2009-09-03 22:45:16 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1方法:$str='外星人入侵';//echo mb_strlen($str);$len=strlen($str);for($i=0;$i<$len;$i++){ if(ord(substr($str,$i,1))>0xa0){ //echo substr($str,$i,2)." ";//单个组合 if($len-$i=='2'){ exit; }else{ echo substr($str,$i,4)." ";//双双组合 } $i++; }else{ echo substr($str,$i,1)."<br>"; }}2.$str='微笑Pasta';$lenstrlen($str);for($j;$j<$len;$j++){ if(ord(substr($str,$j,1))>0xa0){ //echo substr($str,$j,2)." ";//单字组合 if($j<'2'){ echo substr($str,$j,4)." ";//双字组合 }else{ echo substr($str,$j,0); } $j++; }else{ echo substr($str,$j,1); } }3,4的解法类推! 2.方法有点小错误.$lenstrlen($str);=>$len=strlen($str); 全部通用:<pre><?phpfunction q($v){ $arr1_all = array();$arr2_all = array(); foreach (explode(' ',trim(preg_replace("/\w+/",' $0 ',$v))) as $a){ $arr2 = array(); if (preg_match("/^\d+$/",$a)) { $arr1 = str_split($a,1); if ($a<1000){ $len = count($arr1); for ($i=0;$i<$len;$i++){ if ($i!=0) $arr2[] = $arr1[$i-1].$arr1[$i]; } } } elseif (preg_match("/\w+/",$a)){ $arr1 = array($a); } else { $arr1 = str_split($a,3); $len = count($arr1); for ($i=0;$i<$len;$i++){ if ($i!=0) $arr2[] = $arr1[$i-1].$arr1[$i]; } } $arr1_all = array_merge($arr1_all,$arr1); $arr2_all = array_merge($arr2_all,$arr2); } $arr = array_merge($arr1_all,$arr2_all); return $arr;}print_r(q('外星人入侵 微笑Pasta康熙来了090901绝代商娇17'));print_r(q('外星人入侵'));print_r(q('微笑Pasta'));print_r(q('康熙来了090901'));print_r(q('绝代商娇17'));/* utf-8 */?></pre> 谢谢jnkc,测试成功.我对正则不懂,能帮忙解答正则的意思吗? preg_replace("/\w+/",' $0 ',$v)\w 匹配字母或数字+ 匹配1次或多次$0 匹配得到的结果这个是为了把中文和其它以空格分隔开preg_match("/^\d+$/",$a)^ 字符串的开始位置\d 数字$ 字符串结束位置就是检验是否全数字,其实也相当于is_numeric()str_split($a,3)3是因为utf-8下中文占3字节就是纯中文字符串按单个中文字分割为数组其它相关的查一下语法手册吧 正则问题 PHP的文件下载问题,有兴趣的看一看 php mkdir生成目录后是755权限 50分求教 关于php 加密函数 PHP初心者, 简单的代码, 就是查不出错 请问sleep与usleep的区别 如何对两个timestamp格式的时间进行比较? 用php实现自动截取swf中某一秒的截图?急,急,急,急 关于锁定的问题!! 请问一个Cookies的问题,很急,望帮忙! PHP Exception 讨论 专家预言:PHP将比Java更受开发人员欢迎
//echo mb_strlen($str);
$len=strlen($str);
for($i=0;$i<$len;$i++){
if(ord(substr($str,$i,1))>0xa0){
//echo substr($str,$i,2)." ";//单个组合
if($len-$i=='2'){
exit;
}else{
echo substr($str,$i,4)." ";//双双组合
}
$i++;
}else{
echo substr($str,$i,1)."<br>";
}
}
2.
$str='微笑Pasta';
$lenstrlen($str);
for($j;$j<$len;$j++){
if(ord(substr($str,$j,1))>0xa0){
//echo substr($str,$j,2)." ";//单字组合
if($j<'2'){
echo substr($str,$j,4)." ";//双字组合
}else{
echo substr($str,$j,0);
}
$j++;
}else{
echo substr($str,$j,1);
}
}
3,4的解法类推!
=>$len=strlen($str);
<pre>
<?php
function q($v)
{
$arr1_all = array();$arr2_all = array();
foreach (explode(' ',trim(preg_replace("/\w+/",' $0 ',$v))) as $a){
$arr2 = array();
if (preg_match("/^\d+$/",$a)) {
$arr1 = str_split($a,1);
if ($a<1000){
$len = count($arr1);
for ($i=0;$i<$len;$i++){
if ($i!=0) $arr2[] = $arr1[$i-1].$arr1[$i];
}
}
} elseif (preg_match("/\w+/",$a)){
$arr1 = array($a);
} else {
$arr1 = str_split($a,3);
$len = count($arr1);
for ($i=0;$i<$len;$i++){
if ($i!=0) $arr2[] = $arr1[$i-1].$arr1[$i];
}
}
$arr1_all = array_merge($arr1_all,$arr1);
$arr2_all = array_merge($arr2_all,$arr2);
}
$arr = array_merge($arr1_all,$arr2_all);
return $arr;
}
print_r(q('外星人入侵 微笑Pasta康熙来了090901绝代商娇17'));
print_r(q('外星人入侵'));
print_r(q('微笑Pasta'));
print_r(q('康熙来了090901'));
print_r(q('绝代商娇17'));
/* utf-8 */
?>
</pre>
\w 匹配字母或数字
+ 匹配1次或多次
$0 匹配得到的结果
这个是为了把中文和其它以空格分隔开preg_match("/^\d+$/",$a)
^ 字符串的开始位置
\d 数字
$ 字符串结束位置
就是检验是否全数字,其实也相当于is_numeric()str_split($a,3)
3是因为utf-8下中文占3字节
就是纯中文字符串按单个中文字分割为数组其它相关的查一下语法手册吧