-1

需要帮忙。如何使用标签将字符串拆分为数组?

输入:

<aa> test1 </aa> test2 <aa> test3 </aa> test4 ....

输出:

arr[0] = <aa> test1 </aa>;
arr[1] = test2;
arr[2] = <aa> test3 </aa>;
arr[3] = test4;

提前致谢!

4

2 回答 2

4

使用半狡猾的正则表达式的超棒力量!

$string = "<aa> test1 </aa> test2 <aa> test3 </aa> test4";
$arr = preg_split('/(<[0-9a-zA-Z_]+>[^<]*<\/[0-9a-zA-Z_]+>)/', $string, NULL, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
于 2013-04-26T01:59:34.283 回答
0

这可以使用爆炸

我早些时候回答了这个问题,但它被否决了,因为有人认为那样做是不可能的,嗯,这是可能的。您只需要构建自己的数组,但首先要做的是。

首先,我们有你提到的这个字符串:

$string = "<aa> test1 </aa> test2 <aa> test3 </aa> test4";

现在我们可以爆炸它:

$e = explode(' ', $string);

我们有一个数组 $e 保存所有的拆分,可以得到这样的结果:

echo $e[0]. $e[1]. $e[2]. "<br>";
echo $e[3]. "<br>";
echo $e[4]. $e[5]. $e[6]. "<br>";
echo $e[7]. "<br>";

输出是:

<aa> test1 </aa>;
test2;
<aa> test3 </aa>;
test4;

但这很混乱,可以理解。但是,可以遍历数组并像您想要的那样构造一个数组:

$result = array();
for($i = 0; $i < sizeof($e) ; $i++)
{
    if($i % 2 == 0)
    {
        $tempRes = $e[$i]. $e[$i+1]. $e[$i+2];
    }
    else
    {
        $tempRes = $e[$i+2];
        $i+=2;
    }
    array_push($result, $tempRes);
}

输出是一样的。

这可能不是最好的方法,但它确实有效。

于 2013-04-26T02:11:53.650 回答