2013-12-23 1 views
0

나는이 스레드에서 다른 인용, 인용 부호로 둘러싸이지 않은, 인용, 인용 부호로 둘러싸이지 않은 ... 경우에 대한 정규식에 대한 질문을했습니다 . quoted, quoted, quoted, quoted, quoted ... etc ...와 같이 인용 부호가 붙은 따옴표가 아닌 이 있습니다. 나는 iterative 또는 recursive를 수행해야한다고 생각한다 ... 나는 예제를 설명 할 것이다.견적 태그 정규식 PHP는 일반적인 경우

some unquoted text11 
[quote="person1"]some quoted text11[/quote] 
[quote="person2"]some quoted text22[/quote] 
[quote="person3"]some quoted text33[/quote] 
some unquoted text22 
... 
[quote="person4"]some quoted text44[/quote] 
... 

결과 배열은 다음과 같아야합니다

Array //PRESERVED ORDER 
     (
      [0] => Array 
       (
        ['type'] => unquoted 
        ['name'] => '' 
        ['text'] => some unquoted text11 
       ) 
      [1] => Array 
       (
        ['type'] => quoted 
        ['name'] => person1 
        ['text'] => some quoted text11 
       ) 
      [2] => Array 
       (
        ['type'] => quoted 
        ['name'] => person2 
        ['text'] => some quoted text22 
       ) 
      [3] => Array 
       (
        ['type'] => quoted 
        ['name'] => person3 
        ['text'] => some quoted text33 
       ) 
      [4] => Array 
       (
        ['type'] => unquoted 
        ['name'] => '' 
        ['text'] => some unquoted text22 
       ) 

       ... 

      [5] => Array 
       (
        ['type'] => quoted 
        ['name'] => person4 
        ['text'] => some quoted text44 
       ) 

       ... 
     } 
+3

안녕하세요. 당신이 시도한 것을 보여 주시겠습니까? – HamZa

답변

0

정규 표현식이 문제를 해결하기위한 나쁜 선택이다, 그들이 당신에게 상태를 유지 할 수있는 기능을 제공하지 않기 때문에. 중첩을 언급 할 때 참조하고있는 바로 그 상태. 중첩 된 태그를 허용하지 않는 간단한 접근 방법에 대해서도 솔루션은 루트 요소를 이와 같이 식별하기를 원하기 때문에 식의 상태를 계속 확인해야합니다 (: 예상 배열의 첫 번째 요소 당).

더 나은 해결 방법은 BBcode과 같이 이미 입증되고 빠른 단일 패스 구문 분석기를 사용하는 것입니다. 훨씬 더 효과적인 작업을 수행하고 유지 보수가 가능한 코드를 제공 할 수 있습니다.

+0

PCRE는 생각보다 훨씬 강력합니다. [regex의 힘] (http://nikic.github.io/2012/06/15/The-true-power-of-regular-expressions.html)을보십시오. 난 이미이 질문에 대한 정규식 솔루션을 가지고 있지만, 우리는 [helpvampire] (http://slash7.com/2006/12/22/vampires/) 먹이해서는 안됩니다. – HamZa