Home > Article > Backend Development > Application example of php split() string splitting function
Note that pattern is a regular expression. If the separation character you want to use is a special character in the regular expression, you must escape it first. You 2, split the first four fields in /etc/passwd:
If there are n items in the string that match pattern, the returned array will contain n+1 cells. For example, if pattern is not found, a one-element array is returned. Of course, this is also true if string is empty. Example 3, parse dates that may be separated by slashes, dots, or horizontal lines:
Note: pattern is a regular expression. If the delimiting character you want to use is a special character in a regular expression, you must escape it first. If you think the PHP function split() (or any other regex function) behaves strangely, please read the regex.7 file included in the regex/ subdirectory of the PHP distribution. This file is in man page format and can be read with a command like man /usr/local/src/regex/regex.7. Split a piece of text according to the number of words, because the text may be a mixture of Chinese and English, and the PHP function strlen can only calculate the number of bytes of the string, so I implemented several functions and shared them. Example 1, calculate the total length of characters. <?php function ccStrLen($str) #计算中英文混合字符串的长度 { $ccLen=0; $ascLen=strlen($str); $ind=0; $hasCC=ereg(”[xA1-xFE]“,$str); #判断是否有汉字 $hasAsc=ereg(”[x01-xA0]“,$str); #判断是否有ASCII字符 if($hasCC && !$hasAsc) #只有汉字的情况 return strlen($str)/2; if(!$hasCC && $hasAsc) #只有Ascii字符的情况 return strlen($str); for($ind=0;$ind<$ascLen;$ind++) { if(ord(substr($str,$ind,1))>0xa0) { $ccLen++; $ind++; } else { $ccLen++; } } return $ccLen; } ?> Example 2, intercept the string from the left side. <?php function ccStrLeft($str,$len) #从左边截取中英文混合字符串 { $ascLen=strlen($str); if($ascLen<=$len) return $str; $hasCC=ereg(”[xA1-xFE]“,$str); #同上 $hasAsc=ereg(”[x01-xA0]“,$str); if(!$hasCC) return substr($str,0,$len); if(!$hasAsc) if($len & 0×01) #如果长度是奇数 return substr($str,0,$len+$len-2); else return substr($str,0,$len+$len); $cind=0;$flag=0;$reallen=0;//实际取字节长 while($cind<$ascLen && $reallen<$len) { //by bbs.it-home.org if(ord(substr($str,$cind,1))<0xA1){ //如果该字节为英文 则加一 $cind++; }else{//否则 加2个字节 $cind+=2; } $reallen++; } return substr($str,0,$cind); } ?> Example 3, store the given text into an array according to the number of cuts (suitable for short text, long articles can be processed directly without dividing a part) <?php function SplitContent($content,$smslen){ $str_tmp=$content; $arr_cont=array(); $len_tmp=0; $i=0;//分割绝对位置 while (strlen($str_tmp)>0){ $str_tmp=ccStrLeft($str_tmp,$smslen); array_push($arr_cont,$str_tmp); $i+=strlen($str_tmp); $str_tmp=substr($content,$i,strlen($content)); } return $arr_cont; } //by bbs.it-home.org ?> Test: <?php $str=’a计算中英文混合1234字符串的长度abcd’; echo $str.’的长度为:’.ccStrLen($str); echo ‘<br>’; $smslen=3;//截取长度 print_r(SplitContent($str,$smslen)); ?> Segmentation results: Array ( [0] => a calculation [1] => Chinese and English [2] => Mix 1 [3] => 234 [4] => string [5] => length of [6] => abc [7] => d ) |