2013-04-29 3 views

답변

6

으로 replaceAll 일치하는 모든 그룹을 대체

당신은

System.out.println("city,state,country".replaceAll("(.*?,)", "")); 
4

하나뿐 아니라 쉼표로 끝나는 그룹을 캡처하고 있기 때문에 현재 작동하지 않습니다.

System.out.println("city,state,country".replaceAll("^[^,]*+,", "")); 
+1

+1 - 꺼려 진 한정자에 대한 대안으로 부정화 된 문자 클래스를 사용하는 것이 좋습니다. – Alex

+0

@Alex와의 동의는 대답의 좋은 부분입니다. 더 멀리 나아가서 그것을 "사욕적"욕심쟁이 일치, 즉'^ [^,] * + '로 만들 수 있습니다. 이것은 역 추적이 절대로 필요하지 않음을 나타냅니다. –

0

? non-greedy 플래그는 컨텍스트 내에서 + 또는 * 뒤에 만 사용할 수 있으며 0 또는 1 일치입니다.

^(.*?,) 

또는 그런

: 이름에서 알 수

System.out.println("city,state,country".replaceAll("(.*?,)((?:.*?,)+)", "$2")); 
+0

이것은 도시, 상태를 없애 버릴 것입니다. 그는 국가, 국가를 유지하기를 원합니다. –

1

이 식을 시도합니다. 그룹이 어디에 매치되는지 좀 더 구체적으로 밝혀야합니다. 첫 번째 일치 그룹을 지정하려면 앵커로 String^의 시작을 지정할 수 있습니다

"city,state,country".replaceAll("^(.*?,)", "") 
+1

왜 당신이 downvoted인지 확실하지 않습니다. 나는이 대답에서 그룹 참조가 대체면에서 받아 들여지는 것을 배웠다. –

7
  1. 을 당신이 바로 *?를 추가 할 필요가 비 욕심 .*을 만들고 싶어합니다.
  2. replaceAll 부품 일치하는 모든 항목을 대체 할 것이다, 그래서 당신은 아마

    System.out.println("city,state,country".replaceFirst(".*?,", "")); 
    

    출력하려고 replaceFirst

사용해야합니다

state,country 

당신이 사용할 수없는 경우 replaceFirst이고로 숙박해야합니다.다음 @Reimeus answer 아마 당신이 무엇을 찾고 있습니다.

+0

replaceFirst가 사용 된 경우에만 작동하지만 그렇지 않은 경우 도시와 주를 삭제합니다. –

+0

@ 0A0D 당신이하는 말을 잘 모르겠습니다. 더 설명해 주시겠습니까? – Pshemo

+0

그러면'city, state, '와 일치하고 아무 것도 대체하지 않고 단지'country'를 제공합니다. 내 생각에 : http://regexr.com?34nck replaceAll을 사용하는 경우 –