文字

mb_split

(PHP 4 >= 4.2.0, PHP 5)

mb_split使用正则表达式分割多字节字符串

说明

array mb_split ( string $pattern , string $string [, int $limit = -1 ] )

使用正则表达式 pattern 分割多字节 string 并返回结果 array

参数

pattern

正则表达式。

string

待分割的 string

limit
如果指定了可选参数 limit,将最多分割为 limit 个元素。

返回值

array 的结果。

注释

Note:

The character encoding specified by mb_regex_encoding() will be used as the character encoding for this function by default.

参见

  • mb_regex_encoding() - Set/Get character encoding for multibyte regex
  • mb_ereg() - Regular expression match with multibyte support

用户评论:

[#1] Stas Trefilov, Vertilia [2015-07-02 11:01:47]

a (simpler) way to extract all characters from a UTF-8 string to array with a single call to a built-in function:

<?php
  $str 
'????-
?????'
;
  
print_r(preg_split('//u'$strnullPREG_SPLIT_NO_EMPTY));
?>


Output:

Array
(
    [0] => ??
    [1] => ??
    [2] => -
    [3] => 

    [4] => ??
    [5] => ??
    [6] => ??
    [7] => ??
)

[#2] gunkan at terra dot es [2012-04-05 18:17:08]

To split an string like this: "??????????????Z????" using the "??" delimiter i used:

  $v = mb_split('??',"??????????????Z????");

but didn't work.

The solution was to set this before:

    mb_regex_encoding('UTF-8');
   mb_internal_encoding("UTF-8"); 
  $v = mb_split('??',"??????????????Z????");

and now it's working:

Array
(
    [0] => ??
    [1] => ??
    [2] => ??
    [3] => ???
    [4] => ?Z
    [5] => ??
)

[#3] boukeversteegh at gmail dot com [2011-04-14 13:23:25]

The $pattern argument doesn't use /pattern/ delimiters, unlike other regex functions such as preg_match.

<?php
   
# Works. No slashes around the /pattern/
   
print_rmb_split("\s""hello world") );
   Array (
      [
0] => hello
      
[1] => world
   
)

   
# Doesn't work:
   
print_rmb_split("/\s/""hello world") );
   Array (
      [
0] => hello world
   
)
?>

[#4] boukeversteegh at gmail dot com [2010-09-10 09:43:15]

In addition to Sezer Yalcin's tip.

This function splits a multibyte string into an array of characters. Comparable to str_split().

<?php
function mb_str_split$string ) {
    
# Split at all position not after the start: ^
    # and not before the end: $
    
return preg_split('/(?<!^)(?!$)/u'$string );
}

$string   '???';
$charlist mb_str_split$string );

print_r$charlist );
?>


# Prints:
Array
(
    [0] => ??
    [1] => ??
    [2] => ?
)

[#5] qdb at kukmara dot ru [2010-03-25 02:46:32]

an other way to str_split multibyte string:
<?php
$s
='???????';

//$temp_s=iconv('UTF-8','UTF-16',$s);
$temp_s=mb_convert_encoding($s,'UTF-16','UTF-8');
$temp_a=str_split($temp_s,4);
$temp_a_len=count($temp_a);
for(
$i=0;$i<$temp_a_len;$i++){
    
//$temp_a[$i]=iconv('UTF-16','UTF-8',$temp_a[$i]);
    
$temp_a[$i]=mb_convert_encoding($temp_a[$i],'UTF-8','UTF-16');
}

echo(
'<pre>');
print_r($temp_a);
echo(
'</pre>');

//also possible to directly use UTF-16:
define('SLS',mb_convert_encoding('/','UTF-16'));
$temp_s=mb_convert_encoding($s,'UTF-16','UTF-8');
$temp_a=str_split($temp_s,4);
$temp_s=implode(SLS,$temp_a);
$temp_s=mb_convert_encoding($temp_s,'UTF-8','UTF-16');
echo(
$temp_s);
?>

[#6] gert dot matern at web dot de [2009-08-03 03:34:58]

We are talking about Multi Byte ( e.g. UTF-8) strings here, so preg_split will fail for the following string: 

'Wei?e Rosen sind nicht gr??n!'

And because I didn't find a regex to simulate a str_split I optimized the first solution from adjwilli a bit:

<?php
$string 
'Wei?e Rosen sind nicht gr??n!'
$stop   mb_strlen$string);
$result = array();

for( 
$idx 0$idx $stop$idx++)
{
   
$result[] = mb_substr$string$idx1);
}
?>


Here is an example with adjwilli's function:

<?php
mb_internal_encoding
'UTF-8');
mb_regex_encoding'UTF-8');  

function 
mbStringToArray
$string
)
{
  
$stop   mb_strlen$string);
  
$result = array();

  for( 
$idx 0$idx $stop$idx++)
  {
     
$result[] = mb_substr$string$idx1);
  }

  return 
$result;
}

echo 
'<pre>'PHP_EOL
print_rmbStringToArray'Wei?e Rosen sind nicht gr??n!'true)), PHP_EOL,
'</pre>'
?>


Let me know [by personal email], if someone found a regex to simulate a str_split with mb_split.

[#7] adjwilli at yahoo dot com [2007-12-26 09:37:58]

I figure most people will want a simple way to break-up a multibyte string into its individual characters. Here's a function I'm using to do that. Change UTF-8 to your chosen encoding method.

<?php
function mbStringToArray ($string) {
    
$strlen mb_strlen($string);
    while (
$strlen) {
        
$array[] = mb_substr($string,0,1,"UTF-8");
        
$string mb_substr($string,1,$strlen,"UTF-8");
        
$strlen mb_strlen($string);
    }
    return 
$array;
}
?>

上一篇: 下一篇: