2012-06-17 3 views
1

자바에서 Pattern 및 Matcher 클래스를 사용하여 링크 파일 스크립트를 구문 분석합니다. 내가 필요로하는 텍스트는 섹션의 일부입니다 : (. *) 지금 내가 자바 패턴 및 매처

Pattern SectPattern = Pattern.compile("(SECTIONS\\{(.*)\\})"); 

을 사용하고

SECTIONS 
    { 
     .text : {} > FAST_MEM /* Link all .text sections into ROM */ 
     .intvecs : {} > 0x0 /* Link interrupt vectors at 0x0 */ 
     .data : /* Link .data sections */ 
     { 
      tables.obj(.data) 
      . = 0x400; /* Create hole at end of block */ 
     } = 0xFF00FF00 > EEPROM /* Fill and link into EEPROM */ 
     ctrl_vars: /* Create new ctrl_vars section */ 
     { 
      ctrl.obj(.bss) 
     } = 0x00000100 > SLOW_MEM /* Fill with 0x100 and link into RAM */ 
     .bss : {} > SLOW_MEM /* Link remaining .bss sections into RAM */ 
    } 

내가 그룹을 추출 할하지만 결과가 아닌 내가이 예상 누구든지 사용하는 더 좋은 패턴에 대한 아이디어가 있습니까?

+0

이렇게하면 파일에 하나 이상의 SECTION이있는 것일 수도 있습니다. 맞습니까? – verisimilitude

+0

정규식은 일치하는 중첩 가능한 중괄호를 구문 분석하는 올바른 선택이 아닙니다. –

답변

1

이 일치 및 섹션 {} 내부의 내용을 인쇄합니다. sample이 패턴 샘플입니다

Pattern pattern = Pattern.compile("SECTIONS.*?\\{(.*)\\}", Pattern.DOTALL); 
Matcher matcher = pattern.matcher(sample); 
matcher.find(); 

System.out.println(matcher.group(1)); 

. 줄 바꿈을 올바르게 처리하려면 Pattern.DOTALL이 필요하며 다른 줄은 자체적으로 설명해야합니다.

+0

Thak 대단히, 그것은 일했다 :) – Mike

0

아마도 사용자는 고려하지 않은 공백이있을 수 있습니다.
이 시도 : 나는 또한 패턴에서 외부 그룹을 제거

"SECTIONS\\s*\\{(.*)\\}" 

공지 사항 (나는 그것에 대한 이유가 표시되지 않습니다).
예를 들어, 일치시킨 후에는 그룹 1을 사용하십시오.
욕심이 일치하는 경우에만 작동합니다 (기본값 인 경우).