好的,我们有一个复杂的问题。
我正在尝试从一堆旧数据中提取一些值。它是一堆字符串,基本上是与||
test1||keep||1:1||test||3462||7885||test
规则
字符串的每个部分都可以包含其中的任何字符,|
除外,或者像<>
这样的两个箭头(请参见下文)保留为分隔符。
任何部分都可能为空。
e.g。在这一个中,第一个,第五个和第六个部分是空的,第三个部分包含许多非字母数字字符。
||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
执行此操作,但后悔不喜欢搜索非固定长度的字符串。
我无法更改数据。这是我必须使用的旧数据。
答案 0 :(得分:0)
$array = [];
$strings = explode('<>', $yourContent);
foreach ($strings as $string) {
$array[] = explode('||', $string)[1];
}
这使用PHP 5.4中引入的数组解除引用。