正则表达式提取数据块

时间:2010-01-16 23:03:59

标签: php regex preg-match-all

有人会关心帮助我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后面跟着由^分隔的六列任意数据。 base64编码列也由^

分隔

我目前的微弱尝试包含很多([^\^].*)并且不会匹配任何内容。指针非常赞赏。

4 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:1)

我不太了解你的例子,但是这样做了吗?

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

或者更精致的一个:

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

答案 2 :(得分: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";
    }
}

答案 3 :(得分:0)

试试这个

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