2017-11-02 13 views
1

정규 표현식을 사용하여 여러 줄 패턴의 문자열을 검색하려고합니다. 문자열의 예는 다음과 같습니다여러 줄 문자열에 대해 REGEX 일치 항목 찾기

! 
map-class frame-relay TempMap_1 
frame-relay cir 1536000 
frame-relay bc 15360 
frame-relay mincir 281000 
frame-relay adaptive-shaping becn 
service-policy output AB_TEMP_F1536K_0-256K-384K-128K_18 
logging trap debugging 
logging source-interface Loopback1 
logging 136.91.111.21 

난 추출하려고 일치하는 문자열이

map-class frame-relay TempMap_1 
frame-relay cir 1536000 
frame-relay bc 15360 
frame-relay mincir 281000 
frame-relay adaptive-shaping becn 
service-policy output AB_TEMP_F1536K_0-256K-384K-128K_18 

패턴입니다 내가

map-class frame-relay TempMap_1[]* 

Pattern pattern = Pattern.compile("map-class frame-relay TempMap_1[]*", Pattern.DOTALL); 

이 나는 ​​오전 내에 넣어 아주 확실하지 [ ]를 사용하여 정규식을 작동시킵니다. Java와 Pattern.DOTALL을 사용하여 문자열을 찾습니다. 어떤 도움을 주시면 감사하겠습니다. 자바 와

+0

정규 표현식은 행 구분 및 기타 공백을 고려하지 않습니다. 정규 표현식의 공백을 \ s와 같이 바꾸십시오. –

+0

정규 표현식에 대한 입문서를 읽으면서 정규 표현식의 내용과 작동 방식을 이해할 것을 권장합니다. regular-expressions.info는 괜찮은 리소스입니다. 문제와 관련하여 찾고있는 것을 자세하게 설명 할 수 있습니까? 'map-class'로 시작하여 임의의 수의 줄이 한 칸 들여 쓰여진 줄? – CAustin

+0

@CAustin : 저는 많은 온라인 자습서를 보았습니다. 나는 정규 표현식에 관해 많이 알고 있지만 여전히 여러 줄의 내용을 아주 잘 파악하지 못하고있다. 단일 줄은 문제가되지 않습니다. "map-class frame-relay TempMap_1"다음에 공백 문자가없는 첫 줄까지 공백 문자로 시작하는 모든 줄을 찾으려고합니다. 위의 예제 "로깅 트랩 디버깅"에서처럼 종료 조건이어야합니다. –

답변

2

, 당신은 여기에 들여 쓰기를 활용하고

String regex = "map-class frame-relay TempMap_1.*(?:\\R\\h+.*)*"; 

regex demo를 참조 사용할 수 있습니다. Do Pattern.DOTALL이 패턴과 함께 사용하십시오.

세부

  • map-class frame-relay TempMap_1 - 리터럴 문자열
  • .* - 행의 나머지
  • (?:\\R\\h+.*)* - 0+의 연속 시퀀스 :
    • \\R - 줄 바꿈 시퀀스 (Java 7에서는을 사용하십시오.,가) 충분해야
    • \\h+ - 1+ 수평 공백 (자바 7, [^\\S\r\n]+ 사용)
    • .*
    • - 행의 나머지.

Java demo :

String s = "!\nmap-class frame-relay TempMap_1\n frame-relay cir 1536000\n frame-relay bc 15360\n frame-relay mincir 281000\n frame-relay adaptive-shaping becn\n service-policy output AB_TEMP_F1536K_0-256K-384K-128K_18\nlogging trap debugging\nlogging source-interface Loopback1\nlogging 136.91.111.21"; 
Pattern p = Pattern.compile("map-class frame-relay TempMap_1.*(?:\\R\\h+.*)*"); 
Matcher m = p.matcher(s); 
List<String> res = new ArrayList<>(); 
while(m.find()) { 
    res.add(m.group()); 
} 
System.out.println(res); 

출력 :

[map-class frame-relay TempMap_1 
frame-relay cir 1536000 
frame-relay bc 15360 
frame-relay mincir 281000 
frame-relay adaptive-shaping becn 
service-policy output AB_TEMP_F1536K_0-256K-384K-128K_18] 
+1

정말 고마워요! 굉장해! 정말 좋았어요! –