2014-12-26 4 views
0

한 줄씩 줄을 처리하고 싶지만 그 줄에는 squarebracket-tags로 표시된 몇 개의 하위 요소가있을 수 있습니다.하위 줄이있는 줄을 줄로 나누기

Line 1 
[keyword|title|anything] 
Line 2 
Line 3 
Line 4 
[end] 
Line 5 
Line 6 

포맷 된 결과가 될 수있는 일 같은 :

<div class="element">Line 1</div> 
<div class="subcat"> 
    <h3>title</h3> 
    <div class=”element”>Line 2</div> 
    <div class=”element”>Line 3</div> 
    <div class=”element”>Line 4</div> 
</div> 
<div class=”element”>Line 5</div> 
<div class=”element”>Line 6</div> 

그러나 결과 배열 (mayby ​​다차원는?)도 충분하다.

PHP :

$lines = explode(PHP_EOL, $string); 
preg_match_all("/\[[^\]]*\]/", $string, $matches); 

어떻게 대괄호 키워드를 확인받을 수 있나요? 즉, 키워드가 "subcat"인 경우 위의 그림과 같이 괄호 안에 주어진 제목을 사용하여 subcat-div에 줄을 넣고 싶습니다.

정보를 얻기 위해 RegEx를 사용해야한다고 생각합니다. 대괄호. 그런데 서브 캣을위한 라인을 얻으려면 어떻게해야합니까?

어쩌면 그 문자열을 한 줄씩 읽어야합니다. 키워드가있는 괄호가 있으면 다음 줄은 ending-tag까지 다른 배열에 푸시됩니다. 내 이론 생각 그것은 :-)

+0

어떻게 해석하기 어려운 텍스트의 임의 라인 대신 JSON에 따라 이동에 대해. – adeneo

+0

어디에서'subcat'을 얻고 있습니까? – anubhava

+0

위의 내용을 포맷해야합니다. 따라서 div 요소는 예제 일뿐입니다. 결과 배열 (다차원 배열 또는 json 또는 다른 것)도 괜찮습니다. 2 번, 3 번, 5 번 줄을 "추출"하는 방법을 알지 못합니다. 대괄호의 내용입니다. "subcat"은 키워드의 예입니다. – user3142695

답변

0

이 시도 :

<?php 

$string="Line 1 
[subcat|title|anything] 
Line 2 
Line 3 
Line 4 
[end] 
Line 5 
Line 6"; 

$string = str_replace(PHP_EOL, "#", $string); 
$lines = explode("#", $string); 


foreach($lines as $line) 
{ 

    if (preg_match("/^\[(.*)\|(.*)\|(.*)\]$/",$line, $matches)) 
    { 
     #if($matches[1] == 'subcat') 
      print '<div class="'.$matches[1].'">' 
      ."\n" 
      .'<h3>'.$matches[2].'</h3>' 
      ."\n"; 
    } 

    else 
    { 
     print '<div class="element">'.$line.'</div>'."\n"; 
    } 
     if ($line =="[end]") 
    { 
     print "<\div>"."\n"; 
    } 


} 
?> 
관련 문제