$str = '中国';
preg_match_all($pattern,$str,$out); //这个这则匹配汉字,很艰难
$pattern_1 = '/[[\x80-\xff]]/';
$pattern_2 = '/[\x4e00-\x9fa5]/';
print_r($out); //汉字部分都是乱码
编码格式是gbk,还是utf-8,都测试都无效.
[^\u4e00-\u9fa5]
这是一段匹配除了中文以外的字符串
######function str_cut($string, $length, $dot = '...') { $strlen = strlen($string); if($strlen <= $length) return $string; $string = str_replace(array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string); $strcut = ''; if(strtolower(CHARSET) == 'utf-8') { $n = $tn = $noc = 0; while($n < $strlen) { $t = ord($string[$n]); if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) { $tn = 1; $n++; $noc++; } elseif(194 <= $t && $t <= 223) { $tn = 2; $n += 2; $noc += 2; } elseif(224 <= $t && $t < 239) { $tn = 3; $n += 3; $noc += 2; } elseif(240 <= $t && $t <= 247) { $tn = 4; $n += 4; $noc += 2; } elseif(248 <= $t && $t <= 251) { $tn = 5; $n += 5; $noc += 2; } elseif($t == 252 || $t == 253) { $tn = 6; $n += 6; $noc += 2; } else { $n++; } if($noc >= $length) break; } if($noc > $length) $n -= $tn; $strcut = substr($string, 0, $n); } else { $dotlen = strlen($dot); $maxi = $length - $dotlen - 1; for($i = 0; $i < $maxi; $i++) { $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i]; } } $strcut = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $strcut); return $strcut.$dot; }
这个函数是phpcms 2008 中的截取字符串的函数,写的有点多,所以我希望要找个正则匹配的,简单好维护,呵呵
######$str ='中国'; $result = preg_match("/[\x{4e00}-\x{9fa5}]/u",$str); print_r($result);php里面是这样的######
这个我已经解决了,还是感谢下,哈~
我后来查了下,相关版本 比如: [\u4e00-\u9fa5] [\x{4e00}-\x{9fa5}]/u ,关于正则匹配的问题涉及到编码问题,还是需要细细考虑下。
over。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。