Veri bloğunu elde etmek için Regex

4 Cevap php

Biri bir preg_match_all Regex ile bana yardım etmek ister misiniz?

Şöyle bir blok ayıklamak gerekiyor:

(arbitrary data)
alt=BAUSTEIN^550^^transparent^transparent^null^null^(...base64 encoded data...) ^
(arbitrary data)
alt=BAUSTEIN^550^^transparent^transparent^null^null^(...base64 encoded data...) ^

Tüm base64 blokları kodlanmış. Kural şudur: alt=BAUSTEIN ^ tarafından ayrılmış keyfi verilerin altı sütunun izlediği her zaman vardır. Sütun kodlanan base64 da ^ ile ayrılır

benim şimdiki zayıf girişimi ([^\^].*) bir sürü içerir ve her şey maç olmaz. Göstericiler çok takdir.

4 Cevap

Ben çok iyi bir örnek anlamıyorum, ama bu bunu yapmak istiyorsunuz?

alt=BAUSTEIN\^+(.+?)\^+(.+?)\^+(.+?)\^+(.+?)\^+(.+?)\^+(.+?)\^+

Ya da daha rafine bir:

^alt=BAUSTEIN\^+(.+?)\^+(.+?)\^+(.+?)\^+(.+?)\^+(.+?)\^+([0-9a-zA-Z+/=]+)\^+$

Bu deneyin:

alt=BAUSTEIN(?:\^.*?){6}\^(?<base64>.*?)\^

Burada regex olmadan tek yolu. Eğer farklı sınırlayıcı beri, sen bölme yaklaşımı kullanabilirsiniz.

$str= <<<A
(arbitrary data)
alt=BAUSTEIN^550^^transparent^transparent^null^null^(...base64 encoded data...) ^
(arbitrary data)
alt=BAUSTEIN^550^^transparent^transparent^null^null^(...base64 encoded data...)
A;

$s = explode("^",$str);
for($i=0;$i<count($s);$i++){
    #check for alt=BAUSTEIN , if yes, go 6 indices forward to get your stuff
    if ( strpos($s[$i] ,"alt=BAUSTEIN" ) !==FALSE){
        print $s[$i+7]."\n";
    }
}

Bu deneyin

$regex ="@^alt=@BAUSTEIN\^{2}[a-zA-Z]{1}\^[a-zA-Z]{1}\^(.*)"