2014-04-16 2 views
0

XML 파일을 배열로 읽는 중입니다. XML 파일에는 많은 자유형 텍스트가 있습니다. regex를 사용하여 데이터를 캡처 할 수 있습니까?정규식을 사용하여 여러 행 일치 처리

XML 파일 :

<class> 
    <students> 
     <student> 
      <roll>1</roll> 
      <name>first_name 
      middle_name 
      last_name</name> 
      <remark> 
      some free 

      form text goes 
      here 
      </remark> 
     </student> 
    </students> 
</class> 

으로 내가 배열에 값을 얻기 위해 노력하고 있어요 : 나는 regex.Is 올바른 정규식 사용하여 멀티 라인 텍스트를 처리하는 방법을 아주 잘 모르겠습니다

arr[0] <class> 
arr[1] <students> 
arr[2] <student> 
arr[3] <roll>1</roll> 
arr[4] <name>first_name middle_name last_name</name> 
arr[5] <remark>some free form text goes here </remark> 
arr[6] </student> 
arr[7] </students> 
arr[8] </class> 

접근?

+3

이 보인다? 이것은 [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)와 같이 들립니다. – h2ooooooo

+0

어떤 프로그래밍 언어를 사용하고 있습니까? –

+0

@Tuga 확실하지는 않지만 (이전 질문에 기반하여) 그는 PCRE를 사용하고 있다고 생각합니다. – h2ooooooo

답변

0

공백을 줄이고 줄 바꿈을하고 정리할 수 있습니다.

당신이 그렇게, 펄을 사용하고있는 것으로 보인다 :

@result = $subject =~ m!((?:<.*?>)?(?:</?.*?>|\s+<remark>.*?)?(?:[\w|\s]+)?(?:\s*)?(?:</?.*?>)$)!simg; 

REGEX :

/((?:<.*?>)?(?:</?.*?>|\s+<remark>.*?)?(?:[\w|\s]+)?(?:\s*)?(?:</?.*?>)$)/simg 

http://regex101.com/r/xZ3vL9

1

당신은 아마 당신을 얻을 것이다 XML 파서를 사용하려면 대부분의 방법으로 원하는 위치 :

$ perl -E 'use XML::Simple; 
    use Data::Dumper; 
    my $ref = XMLin("a.xml", NormaliseSpace => 2) ; 
    print Dumper $ref;' 
$VAR1 = { 
      'students' => { 
         'student' => { 
            'remark' => 'some free form text goes here', 
            'name' => 'first_name middle_name last_name', 
            'roll' => '1' 
            } 
         } 
     }; 
1

구문 분석에 정규 표현식 XML을 사용하지 마십시오. 실제 XML 구문 분석기를 사용하십시오.

좋은 무거운 무게의 사람

은 다음과 같습니다 쓰기에 있지 좋은 읽기에 XML::LibXML하고 좋은 경량 모듈에 대한

XML::Twig : 당신은 XML 파서를 선호하는 것처럼 XML::Simple

관련 문제