이 형식의 URL이 있습니다.
https://address.com/somestring/somestring-2/c100.200.3.4/somestrigx3/somestring.4
c 및 / 및 점으로 구분 된 c100.200.3.4에서 숫자를 얻고 싶습니다. 그래서 결국 저는 100, 200, 3, 4를 갖고 싶습니다.
고전적인 문자열 검색 및 계산 대신 이에 대한 정규식 패턴을 빌드하는 방법이 있는지 궁금합니다.
하나의 정규식으로 얻을 수 있지만 약간의 코드로 얻을 수 있습니다.
String s = "https://address.com/somestring/somestring-2/c100.200.3.4/somestrigx3/somestring.4";
Pattern pattern = Pattern.compile("(?<=/c)(\\d+)|(?!^)\\G\\.(\\d+)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
if (matcher.group(1) != null)
System.out.println(matcher.group(1));
if (matcher.group(2) != null)
System.out.println(matcher.group(2));
}
IDEONE 데모 보기
정규식은 (?<=/c)(\d+)|(?!^)\G\.(\d+)
: 두 가지 대안이 들어 (?<=/c)(\d+)
그룹 1에 후 숫자의 순서를 일치 및 캡처를 /c
하고는 (?!^)\G\.(\d+)
문자 그대로의 연속적인 순서와 일치 .
와 숫자 (그룹 2에 후자를 캡처) 성공적으로 이전 경기 후 (인해를 (?!^)\G
). 두 그룹 모두 초기화되지 않을 수 있으므로 null인지 확인해야합니다.
최신 정보
결과적으로-자릿수 그룹의 수는 고정 1 (4)이므로 그룹 캡처와 함께 더 간단한 정규식을 사용할 수 있습니다.
String s = "https://address.com/somestring/somestring-2/c100.200.3.4/somestrigx3/somestring.4";
Pattern pattern = Pattern.compile("(?<=/c)(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)");
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
System.out.println(matcher.group(4));
}
다른 데모 보기
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다