Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 提取具有不可预测内容的可预测结构化字符串的特定部分_Php_Regex - Fatal编程技术网

Php 提取具有不可预测内容的可预测结构化字符串的特定部分

Php 提取具有不可预测内容的可预测结构化字符串的特定部分,php,regex,Php,Regex,好吧,我有一个复杂的问题要问你们 我试图从大量旧数据中提取一些值。它是一组字符串,基本上由7个部分组成,与| test1||keep||1:1||test||3462||7885||test 规则 字符串的每个部分都可以包含任何字符,除了|或像这样的两个箭头(请参阅下面的部分),它们被保留为分隔符 任何部分都可能是空的 test54||keep||test's\ (o-kay?).go_od||test||||||<>test||keep||test545's'/.||test

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

我试图从大量旧数据中提取一些值。它是一组字符串,基本上由7个部分组成,与
|

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

规则

  • 字符串的每个部分都可以包含任何字符,除了
    |
    或像这样的两个箭头
    (请参阅下面的部分),它们被保留为分隔符

  • 任何部分都可能是空的

  • test54||keep||test's\ (o-kay?).go_od||test||||||<>test||keep||test545's'/.||test||||test||test
    
e、 g.在这一部分中,第一、第五和第六部分为空,第三部分包含大量非字母数字字符

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

此外…

一些字符串由这7个片段中的多个片段组成,进一步用

我想得到:

array('keep')
对于这个例子:

||keep||test's\ (o-kay?).go_od||test||||||test
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=[];
$array = [];
$strings = explode('<>', $yourContent);
foreach ($strings as $string) {
    $array[] = explode('||', $string)[1];
}
$strings=explode(“”,$yourContent); foreach($strings作为$string){ $array[]=分解(“| |,$string)[1]; }

这使用了PHP5.4中引入的数组解引用。

发布您的尝试…在
上分解,然后在
|
上分解每个片段?@andrewsi这可能是必须的。谢谢,我将对此进行测试并报告,因为我必须对8000行数据执行此操作,然后循环处理8000组结果。
array('keep-me', 'keep', 'keep-me-too!')
$array = [];
$strings = explode('<>', $yourContent);
foreach ($strings as $string) {
    $array[] = explode('||', $string)[1];
}