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后面总是有六列由 分隔的任意数据^。base64 编码的列也由^

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

4

4 回答 4

2

试试这个:

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

我不太了解您的示例,但是这样做可以吗?

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

或者更精致的:

^alt=BAUSTEIN\^+(.+?)\^+(.+?)\^+(.+?)\^+(.+?)\^+(.+?)\^+([0-9a-zA-Z+/=]+)\^+$
于 2010-01-16T23:37:47.113 回答
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 回答
0

试试这个

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