好的,我有一个复杂的问题要问你们。
我正试图从一堆旧数据中提取一些值。这是一组字符串,基本上是由||
连接的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
来做这件事,但look-behind不喜欢搜索非固定长度的字符串。
我无法更改数据。这是我必须要处理的旧数据。
$array = [];
$strings = explode('<>', $yourContent);
foreach ($strings as $string) {
$array[] = explode('||', $string)[1];
}
这使用了PHP 5.4中引入的数组去引用。