2016-05-17 3 views
0

Я ищу для извлечения содержимого в php из разделителей. Например:Как извлечь содержимое из разделителей в php

content useless 
<---------> 
Content to get 
content to get 
content to get 
<---------> 
content useles 
content useless 
<---------> 
Content to get 
content to get 
content to get 
<---------> 
content useless 
<---------> 
Content to get 
content to get 
content to get 
<---------> 

Теперь у меня есть только это:

<?php 
$myfile = file_get_contents("foo.txt"); 
$rows = explode("\n", $myfile); 

foreach($row as $line => $data) { 
    if ($data == "<--------->") { 

    } 
} 
?> 

Я не знаю, как найти вторую позицию моего разделителя и извлекать содержимое.

Надеюсь, я поняла! Приветствия и благодарности.

+0

вы хотите извлечь содержимое на основе <----------> этого разделителем? –

+0

Например, yes or something else –

+0

всегда будет между <--------->? и сколько возможных блоков? –

ответ

1

Это даст получить содержимое всех блоков между < --------> в качестве разделителей

$pattern = '/<-{9}>([\S\s]*?)<-{9}>/'; 

$subject = " 
<---------> 
Content to get 
content to get 
content to get 
<---------> 
Some extra stuff 
<---------> 
Content to get 
content to get 
content to get 
<--------->"; 

$matches = array(); 
preg_match_all($pattern, $subject, $matches); 



$allBlocks = $matches[1]; 


foreach($allBlocks as $block) 
{ 
    var_dump(explode("\n", $block)); 

} 

Однако вы должны пытаться быть более структурированными при определении разделителей.

Поскольку начало вашего контента совпадает с концом контента. <---------> вы можете быть в неприятности позже при масштабировании кода или, если содержание также содержит <--------->

Попробуйте реализации некоторых XML-тег, как </--------> или пользовательские формы.

## БОУ ## Материал \ п материал ## EOU ##

AS БОУ/ГОН быть Beggining/Конец Полезные вещи

+0

Похоже, это работает спасибо! –

-1
<?php 
// $sections will be an array with elements that contains rows between <----> 
$sections = explode(PHP_EOL.'<--------->'.PHP_EOL, file_get_contents("foo.txt")); 
?> 

Теперь вы можете iterrate над разделами и снова взорваться PHP_EOL, то вы получите массив, где каждый элемент является строкой файла.

Вы можете изменить PHP_EOL для «\ r» или «\ n», если вам это нужно.

редактировать:

<?php 

    $sections = explode(PHP_EOL.'<--------->'.PHP_EOL, file_get_contents("foo.txt")); 

    // each section contains file content between <---------> and next <---------> (additionaly start of file when it does not starts with <---------> 
    foreach ($sections as $section){ 

     $rows = explode(PHP_EOL, $section); 

     foreach($rows as $row){ 

      // display section row 
      echo $row.'<br />'; 

     } 

    } 

?> 
+0

Вы имеете в виду, что я должен заменить foreach вашим решением? –

+0

@Maytyn. Ваш код по-прежнему будет предоставлять вам «бесполезную часть контента», поскольку 'explode()' будет разбиваться на разделитель и не извлекать контент между разделителем. –

+0

file_get_contents ("foo.txt") возвращает вам содержимое файла в виде строки. Каждая строка разделяется новой строкой новой строки по умолчанию - PHP_EOL. Путем взрыва массива новой строкой + <-----> + новая строка получает массив, в котором каждый элемент содержит строки между <----><---->. теперь вы можете перебрать элемент массива, чтобы получить отдельную строку. – Maytyn

0

Вы можете использовать регулярное выражение.

<?php 
    $g = file_get_contents("foo.txt"); 
    preg_match('#\<---------\>\r\n(.*?)\r\n\<---------\>#s',$g,$matches); 
    print_r($matches[1]); 
?> 

даст выход:

Content to get 
content to get 
content to get 
+0

Спасибо за ваш ответ! Похоже, что это не работает для меня:/ –

+0

@ N.Roal вы можете показать свой код? –

Смежные вопросы