2016-08-08 4 views
0

내 샘플 문자열을 일치하는 패턴 :자바 - 같은 패턴 사이에

a ghgduysgd a fdferfdf a bvfxbgdf a gdfgdfg 

이 난의 사이의 모든 내용을 찾을 필요가있다.

나는 가지고있다 (?<=a).* 그러나 a 후에 모든 내용과 일치한다. 그러나 나는 a.

첫 번째 반복 : ghgduysgd

두 번째 반복 : fdferfdf 내가 조작에 대해 위의 같은 데이터를 얻을하려는

. 정규식으로 도울 수 있니?

당신은 alrady도 내다 사용하도록 변경하여 정규식에 lookbehind를 사용

답변

1

:

(?<=a).*(?=a|$) 

그런 다음 사용 가능한 첫 번째에 중지 .* 비 욕심 만들 a을 "종료"

(?<=a).*?(?=a|$) 

편집은 다음 a|$ 아래 tobias_k의 코멘트에서이다, 원래는 a

+0

그것은 당신이'에 내다을 바꿀 수 추측 –

+2

만 처음 두 개의 문자열을 일치합니다. –

+0

@tobias_k 당신이 말한 것과 정확히 일치합니다. –

5

당신은 할 수 있었다 이 같은 정규식 시도 (무시 첫 번째 값)

String path = "a ghgduysgd a fdferfdf a bvfxbgdf a gdfgdfg"; 
String[] arr = path.split("(\\s+)?a(\\s+|$)"); // split based on a preceeded and followed by space 
for (String s : arr) { 
    System.out.println(s); 
} 

O/P : 당신은 "A"다음에 공백을 트림에 저장이 문자열을 분할 할 수

// Empty String here. Since your String starts with a 
ghgduysgd 
fdferfdf 
bvfxbgdf 
gdfgdfg 
+0

내 문자열이 너무 큽니다 경우에도 작동합니까? –

+0

@GopsAB - 예. 당신은 시도 할 수 있었다 – TheLostMind

1

ArrayList 그런 다음 전체 단어를 인쇄하려면 Stringbuilder를 사용하여 문자열을 연결할 수 있습니다. $`그 문제를 해결하는 |

String word="a ghgduysgd a fdferfdf a bvfxbgdf a gdfgdfg"; 
     List<String> list=new ArrayList<String>(); 
     list= Arrays.asList(word.split("a")); 
     StringBuilder sb = new StringBuilder(); 
     for(String item: list){ 
      item.trim(); 
     System.out.println(item); 
     sb.append(item); 
     } 

     System.out.println(sb); 
+0

같은 생각. 하지만 정규식으로 끝났다. –