PHP加载匹配strpos的2行之间的所有行,然后移动到数组


PHP load all lines between 2 lines matching strpos and move to array

我有一个文本文件,里面有一堆信息。我需要提取两行之间的所有行,其中这两行匹配一个字符串。

以下是文件的外观示例:

def var test:1
def string myString:My String
do start_sequence
do perform:1
wait
do perform:2
do end_sequence
def var testTwo:2
do perform:3

这个文件由另一个系统输出,我无法修改。我需要做的是加载do start_sequencedo end_sequence之间的所有线路。然后,我将把这些行加载到一个数组中(这部分我可以毫无问题地处理)。

现在我正在把整个文件变成一个数组,每一行都是数组中的一个新值。如何提取匹配字符串(do start_sequencedo end_sequence)之间的所有值,并将它们放在一个单独的数组中?

拍了一张照片,下面是我的想法。

它使用$reading来表示是否应该将行写入另一个变量。希望这能有所帮助。

$data = <<< EOF
def var test:1
def string myString:My String
do start_sequence
do perform:1
wait
do perform:2
do end_sequence
def var testTwo:2
do perform:3
EOF;
$lines = explode("'n", $data);
$data = array();
$reading = false;
foreach($lines as $line)
{
    if ($reading == true && $line == 'do end_sequence')
        $reading = false;
    if ($reading)
    {
        $data[] = $line;
    }
    if ($line == 'do start_sequence')
        $reading = true;
}
var_dump($data);

这将输出以下

array (size=3)
  0 => string 'do perform:1' (length=12)
  1 => string 'wait' (length=4)
  2 => string 'do perform:2' (length=12)

我使用正则表达式解决方案只是为了好玩-http://regexr.com/39i6o

(do perform)(?:.|['n'r])+(?=do end_sequence)

以下是将每一行放入数组的PHP代码-

$pattern = '/(do perform)(?:.|['n'r])+(?=do end_sequence)/';
preg_match($pattern, $data, $matches);  
$newArray = explode("'n",trim($matches[0]));

工作示例。

您可以使用这样的正则表达式:

$text = file_get_contents('t.txt');
preg_match_all("/.*do start_sequence(.*)do end_sequence.*/s", $text, $matches);

$matches[1]中,您将获得原始格式的文本部分(就像文件中一样)。然后,您可以像对完整文件所做的那样拆分行。

由于您有一个字符串数组,只需知道startString和endString的索引就可以解决您的问题。

$a=array ("A","B","C","Comes before","D","E");
$startIndex=array_search("A", $a);
$endIndex= array_search("D", $a);
$neddedArray=  array_slice($a, $startIndex+1,($endIndex-$startIndex)-1);
print_r($neddedArray);

试试这个

$originalString = file_get_contents('yourFile.txt');
$tempArray = explode('do start_sequence', $originalString);
$str = explode('do end_sequence', $tempArray[1]);
$finalArray = $explode(''n', $str[0]);