2012-09-13 4 views
5

저는 유니 코드 영숫자 형식의 문자열을 고정 길이로 분할하는 방법을 찾고 있습니다. 예를 들어 :고정 길이로 문자열 나누기

 

    992000199821376John Smith   20070603 

와 배열은 다음과 같아야합니다

Array (
[0] => 99, 
[1] => 2, 
[2] => 00019982, 
[3] => 1376, 
[4] => "John Smith", 
[5] => 20070603 
) 

어레이 데이터는 다음과 같이 분할됩니다 :

 
    Array[0] - Account type - must be 2 characters long, 
    Array[1] - Account status - must be 1 character long, 
    Array[2] - Account ID - must be 8 characters long, 
    Array[3] - Account settings - must be 4 characters long, 
    Array[4] - User Name - must be 20 characters long, 
    Array[5] - Join Date - must be 8 characters long. 
+0

대상 언어는 무엇입니까? – dasblinkenlight

+0

PHP ... sry가 –

+0

을 언급하는 것을 잊어 버렸습니다. 태그를 추가하면 질문이 잘 보입니다. – dasblinkenlight

답변

2

또는 당신은 레그 피하려면 :

$string = '992000199821376John Smith   20070603'; 
$intervals = array(2, 1, 8, 4, 20, 8); 

$start = 0; 
$parts = array(); 

foreach ($intervals as $i) 
{ 
    $parts[] = mb_substr($string, $start, $i); 

    $start += $i; 
} 
+0

간격을 사용하면 유지 관리가 훨씬 쉬워집니다. +1이 해결책입니다. –

+0

죄송합니다, 작동하지 않습니다. 문자가 아닌 유니 코드의 경우 코드 단위로 나눕니다. –

+0

'$ parts [] = mb_substr ($ string, $ start, $ i, mb_detect_encoding ($ string));은 어떨까요? – noj

0
$s = '992000199821376Николай Шмидт  20070603'; 

    if (preg_match('~(.{2})(.{1})(.{8})(.{4})(.{20})(.{8})~u', $s, $match)) 
    { 
     list (, $type, $status, $id, $settings, $name, $date) = $match; 
    } 
0

할 것 SUBSTR 함수를 사용하여 이것은 아주 쉽게. 이동 (그리고 더 유연) 할 수있는 방법은 아마

$accountDetails = "992000199821376John Smith   20070603"; 
$accountArray = array(substr($accountDetails,0,2),substr($accountDetails,2,1),substr($accountDetails,3,8),substr($accountDetails,11,4),substr($accountDetails,15,20),substr($accountDetails,35,8)); 

이 (akond에 의해 제안)이 정규 표현식이 아닌 다른 트릭을 수행해야합니다. (이것은 여전히 ​​대체 옵션으로 유효 함).

0

당신이 요청하는 방식으로 유니 코드 문자열을 분할 할 수 없습니다입니다.

부품을 무효로 만들 수 없으면 불가능합니다. 일부 코드 포인트는 눈에 띄는 방법이 없습니다. 예를 들어, ש 2은 2 코드 포인트 (UTF-8 및 UTF-16에서는 4 바이트)이므로 정의되지 않았으므로 분할 할 수 없습니다.

유니 코드로 작업 할 때 "문자"는 매우 미끄러운 용어입니다. 코드 포인트, 글리프 등이 있습니다. http://www.utf8everywhere.org의 "문자열 길이"부분을 참조하십시오.

+1

+1. 유니 코드는 어떤 점에서는 훌륭하지만 문자열 처리가 복잡합니다. (당신은 그것이 가능하지 않다고 확신합니까? 아마도 "매우 어렵습니다"?) – ghoti

+0

예, ghoti, 무엇을 요구할 수 없습니다. 나는 이유를 설명했다고 생각 했지, 그렇지? –

관련 문제