dize php karakter değişken uzunluğa sahip olmaktan altdize almak nasıl?

3 Cevap php

I biçiminde bazı verileri

C222 = 50
C1234P687 = 'some text'
C123YYY = 'text'
C444 = 89
C345 = 3
C122P687 = 'some text'
C122YYY = 'text'
....
....

yani temelde 3 farklı formlar

  1. "C" sayısı = değer, örnek - C444 = 89
  2. "C" sayısı "P" numara = değer, örnek - C123P687 = 'bazı metinleri'
  3. "C" numara "YYY" = değer

Sadece numarası (=) işaretinin sol tarafında değişken uzunlukta olup. Değerler değişebilir.

Ben db veri depolamak istiyor

INSERT INTO datatable 
    c_id = "number after C"
    p_id = "number after P" // if it exists for a line of data
    value = 'value'
    yyy = 'value'

Nasıl bu numaralarını almak için herhangi bir fikir?

Teşekkürler

3 Cevap

PHP düzenli ifadeler kullanın. Aşağıdaki normal ifade deseninin sağladığınız tüm davaları maç olacak - preg_match_all (bir diziye geçmek ve PREG_SET_ORDER) ile kullanmak ve geçirilen dizi daha sonra başına bir dizi içerecektir veri satır ve her satırın dizi 5 unsurları içerecektir.

(C[\d]+)(P[\d]+)?(YYY)? = (.+)

Dizinin ilk elemanı test edildi tam dizgesini içerir.

Dizinin ikinci elemanı "C" numarasını içerir.

Mevcut ise dizinin üçüncü elemanı aksi takdirde boş olacak, "P" numarasını içerir.

Mevcut ise dizinin dördüncü unsuru, aksi takdirde boş olacak, "YYY" içerecektir.

Dizinin beşinci element değer içerecektir.

Bir yorumuna yanıt olarak, aşağıdaki düzenli ifade yukarıda değiştirilmiş bir versiyonu, ancak C ve P eşleşen değerleri içermez:

C([\d]+)(?:P([\d]+))?(YYY)? = (.+)

Ben bu yüzden file_get_contents veya fopen gibi bir şey kullanarak, veri dosyasından okunur varsayarak yaşıyorum.

Verileri düzenli Niyet sizin için en iyi bahistir ..

http://php.net/manual/en/function.preg-match-all.php bir göz atın

# UPDATE REG EX UPDATED
preg_match_all("|C([\d]+)(?:P([\d]+))?(YYY)? = (.+)|", $yourDataLine, $out, PREG_SET_ORDER);

$out[0] = TESTED STRING e.g. C123 = 456;    
$out[1] = C;
$out[2] = P;
$out[3] = YYY;
$out[4] = VALUE;

Andy Shellam: reg ifade sayesinde

Düzenli ifadeler kullanmadan bir çözüm:

<?php

$s="C23YYY = 'hello world'";

$p1=explode('=',$s);

$left=trim($p1[0]);
$right=trim($p1[1]);

$value=$right;

if(substr($left,-3)!='YYY'){
    $pos=strpos($left,'P');
    if($pos!==false){
        $c_id=substr($left,1,$pos-1);
        $p_id=substr($left,1+$pos-strlen($left));
    }else{
        $c_id=substr($left,1-strlen($left));
    }
}else{
    $c_id=substr($left,1,strlen($left)-4);
    $yyy='YYY';
}

print("c_id = $c_id <br/>");
print("p_id = $p_id <br/>");
print("value = $value <br/>");
print("yyy = $yyy <br/>");

?>