2010-12-15 3 views
0

мне нужно разделить следующиеPHP preg_split разбить строку условно

$str = 'min(5,6,7,88),email'

$str= 'min(5,6,7,88),!email,max(6,5),alpha_numeric,required'//other possibilities

так он возвращает массив следующим образом:

array(
    [0]=>array(
    [0]=>'min', 
    [1]=>array(5,6,7,88) 
) 
    [1]=>array(
    [0]=>'email' 
) 
) 

это возможно? Кстати email и min может быть что угодно, на самом деле, как хорошо, как 56788

ответ

0

Я думаю preg_match лучше всего подходит для данного конкретного случая. Однако только preg_match не может форматировать вывод так, как вы хотите.

preg_match('/(\w+)\(([0-9,]+)\),(\w+)+/', $str, $values); 
$output = array(
    array($values[1], explode(',', $values[2])), 
    array($values[3]), 
); 
+0

Такого рода вещи я был Фрайд как НТР может быть что угодно `мин (5,6,7,88) ,! электронной почты, не более (6,5), alpha_numeric , required` может быть другим примером – Val 2010-12-15 15:01:07

0

Учитывая следующее:

$test = "min(5,6,7,88),email"; 
$_ = null; 
if (preg_match('/^(?<first>\w+)\((?<array>(?:[0-9]+\x2C*)+)\)\x2C(?<last>\w+)$/',$test,$_)) 
{ 
    $result = Array(
    Array($_['first'],explode(',',$_['array'])), 
    Array($_['last']) 
); 
    print_r($result); 
} 

Оказывает следующий результат:

Array 
(
    [0] => Array 
     (
      [0] => min 
      [1] => Array 
       (
        [0] => 5 
        [1] => 6 
        [2] => 7 
        [3] => 88 
       ) 

     ) 

    [1] => Array 
     (
      [0] => email 
     ) 

)

0
function parse($str) { 
    $str = str_replace(array('(',')'),"0x00",$str); 
    $strArray = explode("0x00",$str); 
    $tokens = array(); 
    $tokenRef = 0; 
    foreach($strArray as $tokenID => $tokenValue) { 
     if (($tokenID % 2) == 1) { 
      --$tokenRef; 
      $tokens[$tokenRef++][1] = '('.$tokenValue.')'; 
     } else { 
      $tokenList = explode(",",$tokenValue); 
      foreach($tokenList as $token) { 
       if ($token != '') { 
        $tokens[$tokenRef++][0] = $token; 
       } 
      } 
     } 
    } 
    return $tokens; 
} 

$str = 'min(5,6,7,88),email'; 

$split = parse($str); 

echo '<pre>'; 
var_dump($split); 
echo '</pre>'; 
echo '<br />'; 

$str = 'min(5,6,7,88),!email,max(6,5),alpha_numeric,required'; 

$split = parse($str); 

echo '<pre>'; 
var_dump($split); 
echo '</pre>'; 
echo '<br />'; 

Придает

array(2) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(3) "min" 
    [1]=> 
    string(10) "(5,6,7,88)" 
    } 
    [1]=> 
    array(1) { 
    [0]=> 
    string(5) "email" 
    } 
} 

и

array(5) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(3) "min" 
    [1]=> 
    string(10) "(5,6,7,88)" 
    } 
    [1]=> 
    array(1) { 
    [0]=> 
    string(6) "!email" 
    } 
    [2]=> 
    array(2) { 
    [0]=> 
    string(3) "max" 
    [1]=> 
    string(5) "(6,5)" 
    } 
    [3]=> 
    array(1) { 
    [0]=> 
    string(13) "alpha_numeric" 
    } 
    [4]=> 
    array(1) { 
    [0]=> 
    string(8) "required" 
    } 
}