1

誰かが正規表現で私を助けてくれませんpreg_match_allか?

次のようなブロックから抽出する必要があります。

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

すべてのbase64エンコードブロック。ルールは次のとおりです。常にalt=BAUSTEIN、で区切られた任意のデータの6つの列が続きます^。base64でエンコードされた列も次のように区切られます^

私の現在の弱い試みには多くが含まれており、([^\^].*)何にも一致しません。ポインタは大歓迎です。

4

4 に答える 4

2

これを試して:

alt=BAUSTEIN(?:\^.*?){6}\^(?<base64>.*?)\^
于 2010-01-16T23:08:17.027 に答える
1

正規表現を使用しない方法の 1 つを次に示します。区切り文字が異なるため、分割アプローチを使用できます。

$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";
    }
}
于 2010-01-16T23:53:57.943 に答える
1

あなたの例はよくわかりませんが、これでうまくいきますか?

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

またはより洗練されたもの:

^alt=BAUSTEIN\^+(.+?)\^+(.+?)\^+(.+?)\^+(.+?)\^+(.+?)\^+([0-9a-zA-Z+/=]+)\^+$
于 2010-01-16T23:37:47.113 に答える
0

これを試して

$regex ="@^alt=@BAUSTEIN\^{2}[a-zA-Z]{1}\^[a-zA-Z]{1}\^(.*)"
于 2010-01-16T23:13:38.747 に答える