2012-10-12 5 views
1

자바에서 정규 표현식을 처음 사용합니다. 정규식을 사용하여 문자열을 추출하는 것을 좋아합니다.java regex : delimeter 뒤에 텍스트를 추출 하시겠습니까?

이 내 문자열 : "안녕하세요, 세계"

내가 ","후 텍스트를 추출하고 싶다. 결과는 "세계"가됩니다. 나는 이것을 시도했다 :

final Pattern pattern = Pattern.compile(",(.+?)"); 
final Matcher matcher = pattern.matcher("Hello,World"); 
matcher.find(); 

그러나 다음 단계는 무엇이겠습니까?

답변

3

Regex가 필요하지 않습니다. 당신은 단순히 쉼표에 분할하고 배열에서 두 번째 요소를 얻을 수 있습니다 : -

System.out.println("Hello,World".split(",")[1]); 

OUTPUT : - 당신이 Regex을 사용하려는 경우

World 

는하지만, 당신이 필요를 Regex에서 ?을 제거하십시오.

?+ 이후는 Reluctant과 일치합니다. W과 일치하며 거기서 멈 춥니 다. 여기에는 필요하지 않습니다. 일치 할 때까지 일치해야합니다.

대신 greedy을 사용하십시오.

final Pattern pattern = Pattern.compile(",(.+)"); 
final Matcher matcher = pattern.matcher("Hello,World"); 

if (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

OUTPUT : - - : 여기

수정 정규식 코드의

World 
1

당신이 가지고있는 것을 확장하면 을 제거해야합니까? 당신의 패턴에서 부호는 욕심 일치를 사용하고 일치하는 그룹을 처리하기 :

final Pattern pattern = Pattern.compile(",(.+)");  // removed your '?' 
final Matcher matcher = pattern.matcher("Hello,World"); 

while (matcher.find()) { 

    String result = matcher.group(1); 

    // work with result 

} 

다른 답변이 문제에 대한 다른 접근 방법을 제안하고 당신이 필요 더 나은 솔루션을 제공 할 수 있습니다.

0
System.out.println("Hello,World".replaceAll(".*,(.*)","$1")); // output is "World" 
0

당신은 주저 표현을 사용하고 단 하나의 문자를 선택합니다 W , 반면에 욕심 꾸러기 하나와 p를 사용할 수 있습니다. RINT하여 일치하는 그룹 내용 :

final Pattern pattern = Pattern.compile(",(.+)"); 
final Matcher matcher = pattern.matcher("Hello,World"); 
if (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

출력 :

World 

는 참조 Regex Pattern doc

관련 문제