0

わかりました、皆さんにとって複雑な問題があります。

古いデータの負荷からいくつかの値を抽出しようとしています。それは基本的に連結された7つの部分である文字列の束です||

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

ルール

  • 文字列の各セクションには、セパレーターとして予約されている、|またはこのような 2 つの矢印(さらに下を参照) を除いて、任意の文字を含めることができます。<>

  • どのセクションも空である可能性があります。

たとえば、この例では、最初の 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

目標

すべての文字列の 2 番目の部分だけを抽出し、配列に入れます。上記の例では、単語が含まれているのはすべての部分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 に答える