• 25-12-2015, 14:25:38
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    parçalanacak yazı şu şekilde olsun:

    $str = "ali, veli (49, 50, abc); hepsi, deli; meli";
    bunu virgüle veya noktalı virgüle göre aşağıdaki fonk. ile parçalayabiliyorum.

    $sonuc = preg_split('~(\,|\;)~', $str, -1, PREG_SPLIT_NO_EMPTY);

    Sonuç:
    ali
    veli (49
    50
    abc)
    hepsi
    deli
    meli


    şeklinde oluyor. ben, parantez içindeki ifadelerin parçalanmasını istemiyorum.

    yani sonuç şu olmalı:
    ali
    veli (49, 50, abc)
    hepsi
    deli
    meli



    bunu nasıl yaparız?
  • 25-12-2015, 18:27:11
    #2
    Üyeliği durduruldu
    $pattern = '~(([a-z A-Z]),|\\;)~';
    $subject = 'ali, veli (49, 50, abc); hepsi, deli; meli';
    $limit = -1;
    $flags = PREG_SPLIT_NO_EMPTY;
    $result = preg_split ($pattern, $subject, $limit, $flags);
    array (
      0 => 'ali',
      1 => ' veli (49, 50, abc)',
      2 => ' hepsi',
      3 => ' deli',
      4 => ' meli',
    );
  • 26-12-2015, 23:19:43
    #3
    verdiğiniz koda göre şu sonuç çıkıyor.
    virgüllülerde sondaki i harfini siliyor.

    Array
    (
    [0] => al
    [1] => veli (49, 50, abc)
    [2] => heps
    [3] => deli
    [4] => meli
    )
  • 13-05-2016, 14:57:23
    #4
    farklı bi yoldan yaptım.

    burada problem çıkaran şey parantezler idi.
    parantez içini parçalamayan bir fonksiyon yazdım.

    önce tüm noktalı virgülleri virgüle çeviriyoruz.
    sonra aşağıdaki fonksiyonu uyguluyoruz.

    function my_exp($str, $sign) {
    	$i = 0;
    	$p = 0;
    	$k = 0;
    	$str = $str . $sign;
    	$array = array();
    	$len = mb_strlen($str,'UTF-8');
    	while ($i < $len) {
    		if (mb_substr($str,$i,1,'UTF-8') == '(') $p = 1;
    		else if (mb_substr($str,$i,1,'UTF-8') == ')') $p = 0;
    		else if (mb_substr($str,$i,1,'UTF-8') == $sign && $p == 0) {
    			$new = trim(mb_substr($str,$k,$i-$k,'UTF-8'));
    			$k = $i+1;
    			if ($new) $array[] = $new;
    		}
    		$i++;
    	}
    	return $array;
    }
    
    $str = 'ali, veli (49, 50, abc); hepsi, deli; meli';
    $str = str_replace(';',',',$str);
    print_r(my_exp($str, ','));
    işine yarayan kullansın.