2017-11-21 6 views
1

아래와 같은 문자열이있는 경우 어떻게해야합니까? 123 (8752)?특정 지점의 문자열 분석

예 :

Testversion v1.23 (8752), beta v1.02 (458) 

내가 정규식으로 노력하고 있지만 지금까지 운이 오전, 이것은 단지 1.23 제공 :

String result = input.replaceAll("[^\\d.]", ""); 
+0

PCRE는 \ D + \ '이 될 것입니다 라인의 끝까지 .* 일치 아무것도 캡처의 끝 \ d + \ (\ d + \)', 아마도 당신의 솔루션을 찾을 수 있습니다. 슬래시도 두 배로 늘릴 필요가 있습니다. 내 의견에는 \ d, \\ d를 써야합니다. –

+0

안녕하세요, replaceAll ("\\ d + \\ \\ (\\ d + \\)", "); ? 불행히도 같은 결과물을 제공합니다. – Simon

+0

죄송합니다. 자바 버전으로 테스트 할 수 없으므로 PHP로 시도하고 있습니다 ^^ Cant가 지금 당장 행운을 빌어 요! 아니면 replaceAll ("\\ d + \\. \\ (\\ d + \\)", ""); (이중 괄호 이스케이프) –

답변

1

사용할 수 .*?(v\\d+\\.\\d+\\s*\\(\\d+\\)).*

input.replaceFirst(".*?(v\\d+\\.\\d+\\s*\\(\\d+\\)).*", "$1"); //v1.23 (8752) 

Java Demo Link

설명

.*?(v\\d+\\.\\d+\\s*\\(\\d+\\)).* : 가능한 한 적은

  • (v\\d+\\.\\d+\\s*\\(\\d+\\)).*? 일치 아무것도 : 그룹

    • v\\d+\\.\\d+ 캡처 ( 시작 : 경기 v, \\d+ 하나 이상의 숫자 . 문자를 \\d+
    • \\s*\\(\\d+\\) : \\s* 0 개 이상의 공백이 다음 ( 하나 이상의 숫자 )

    ).* :. 그룹,

+1

이것은 완벽합니다. – Simon