2016-12-22 6 views
1

"~ (0에서 13까지의 숫자)"로 구분 된 텍스트가 필요하고 "~ 끝"으로 끝나는 텍스트는 중괄호 사이에있는 텍스트를 가져야합니다. 아무도 아이디어가 있니?PHP 텍스트를 배열 Regex에

텍스트 : 정규식

Array 
       (
        [0] => aaaaaa1 
          aaaaaaaaaa 

        [1] => bbbbbbbbbbb 
          sdf23 
          324 <br> 
          sdfs 

        [2] => cccccccccc 

        [3] => dddddddddd 
        . 
        . 
        . 
        . 
        [13] => eeeeeee 

        [14] => fffffff 


       ) 

내 PHP : (실패)

$texto = " 
~0 
    123hola321 
    yyyyyyyyyyy 
    ~1 
    rrrrrrrrrrrr 
    sdf23 
    324 <br> 
    sdfs 
    ~2 
    cccccccccc 
    ~3 
    ddddddddddd 

    ~13 
    ddddddddddd 

    ~14 
    ddddddddddd 
      ~end "; 


$regex = '/^~(\d{1,2}.\n)(.*?)/m'; 
echo $regex; 
preg_replace($regex,$texto,$matches); 


echo "<pre>"; 
print_r($matches); 
echo "</pre>"; 

//  ^~(\d{1,2}.\n)  

// ~\d{1,2} (.*?)2$ 
// 
// ^~\d{1,2}(.*?)end$ 

들으

~0 
    aaaaaa1 
    aaaaaaaaaa 
    ~1 
    bbbbbbbbbb 
    sdf23 
    324 <br> 
    sdfs 
    ~2 
    cccccccccc 
    ~3 
    ddddddddddd 

    ~13 
    eeeeeeeeeee 

    ~14 
    fffffffffff 
      ~end 

END 배열이 (원래는 어쩌면 HTML 호수 텍스트가)

+0

'preg_split ("/ ~ [0-9] + /", $ texto);' – JustOnUnderMillions

답변

0
$texto = " 
~0 
123hola321 
yyyyyyyyyyy 
xxxxxxxx 
ffffffffff 
~1 
rrrrrrrrrrrr 
~2 
cccccccccc 
~3 
ddddddddddd 

~3 
ddddddddddd 
     ~end "; 


$arr = preg_split('#~\d{1,2}.(\r\n|\n|\r)#', $texto); 

echo "<pre>"; 
print_r($arr); 
echo "</pre>"; 
+1

OP의 시도에 어떤 오류가 있었는지, 그리고 코드가 오류를 어떻게 해결하는지 설명하십시오. –

1

나는을 사용할 것입니다.대신 :

$arr = preg_split('/~\d{1,2}/', $texto); 

중간에 모든 것을 캡처 할 필요가 없습니다.

물론 이것은 키가 순차적이며 0 또는에서 시작하는 경우에만 작동합니다. 중요하지 않습니다.

편집 : 과정에서 결과 문자열을 자르려면 정규식에 문자를 추가하지 말아야합니다 (점 .). 그러면 결과에서 유효한 문자가 제거 될 수 있습니다.

대신 만이 함께 공백을 제거 :

$arr = preg_split('/\s*~\d{1,2}\s*/', $texto); 

\s*는 공백 문자 (스페이스, 탭, 개행 등)의 수에 0을 의미한다.

+1

이 방법을 사용하면 해결책을 찾을 수 있습니다. 감사 !! Gracias;) –

+0

@VictorMoscosoLembcke 제 편집을보세요. – jeroen