0

好的,我有一个复杂的问题要问你们。

我正在尝试从大量旧数据中提取一些值。它是一堆基本上由 7 个部分连接的字符串||

test1||keep||1:1||test||3462||7885||test

规则

  • 字符串的每个部分都可以包含任何字符,除了|像这样的两个箭头<>(见下文),它们被保留为分隔符。

  • 任何部分都可以是空的。

例如,在这一个中,前 1、5 和 6 部分是空的,而第 3 部分包含许多非字母数字字符。

||keep||test's\ (o-kay?).go_od||test||||||test

此外...

一些琴弦由这 7 根琴弦中的多个琴弦组成,进一步分开<>

test1||keep||1:1||test||3462||7885||test<>test1||keep||1:1||test||3462||7885||test<>test1||keep||1:1||test||3462||7885||test

请记住,任何内部部分都可能是空的。

test54||keep||test's\ (o-kay?).go_od||test||||||<>test||keep||test545's'/.||test||||test||test

目标

只提取每个字符串的第二部分,然后放入一个数组中。在我上面的例子中,每个部分都有这个词keep

所以对于这个例子:

||keep||test's\ (o-kay?).go_od||test||||||test

我想得到:

array('keep')

对于这个例子:

test1||keep-me||1:1||test||3462||7885||test<>||keep||||||3462||7885||<>test1||keep-me-too!||1:1||test||3462||||test

它可以看作是 3 个不同的字符串,由 分隔<>

test1||keep-me||1:1||test||3462||7885||test

||keep||||||3462||7885||

test1||keep-me-too!||1:1||test||3462||||test

我想提取:

array('keep-me', 'keep', 'keep-me-too!')

笔记

我尝试过这样做,preg_match但后视不喜欢搜索非固定长度的字符串。

我无法更改数据。这是我必须处理的旧数据。

4

1 回答 1

0
$array = [];
$strings = explode('<>', $yourContent);
foreach ($strings as $string) {
    $array[] = explode('||', $string)[1];
}

这使用 PHP 5.4 中引入的数组取消引用。

于 2013-07-11T16:14:43.843 回答