HackerRank/JAVA

[못품]Java Regex

예쁜꽃이피었으면 2024. 1. 17. 16:11

https://www.hackerrank.com/challenges/java-regex/problem?isFullScreen=true

 

Java Regex | HackerRank

Use the power of Java regex to detect valid IP address.

www.hackerrank.com

IP주소 조건 : 

IP 주소는 "A.B.C.D" 형태의 문자열로,
여기서 A, B, C, D의 값은 0에서 255 사이일 수 있습니다. 
선두에 오는 0은 허용됩니다. 
A, B, C 또는 D의 길이는 3을 초과할 수 없습니다.

 

 

 

정규식 확인할 수 있는 사이트

https://regexr.com/

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

class MyRegex{
    String pattern = "";
}

 

정규식을 넣어야 하는데.. 모르겠다..

 

20240118)

어제 한번 봤다고 안보고 입력해봤는데.. 완전히 이해를 하고 있지 않으니 오류가 난다.내일 다시 도전

 

20240118) 2차 도전

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Scanner;

class Solution{

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            String IP = in.next();
            System.out.println(IP.matches(new MyRegex().pattern));
        }

    }
}

//Write your code here
//IP address is a string in the form "A.B.C.D",
//where the value of A, B, C, and D may range from 0 to 255. 
//Leading zeros are allowed. 
//The length of A, B, C, or D can't be greater than 3.
class MyRegex{ 
    //0~199
    //200~249
    //250~255
    String pattern = "^([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])\\."
                    + "([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])\\."
                    + "([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])\\."
                    + "([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])$";
    
}

 

이해하고 작성하니까 통과됨.

처음에 | 양 옆에 보기좋으라고 공백줬었는데 오류남.. 

 

조건을 0~199 / 200~249 / 250~255로 준다는 걸 알고 있어서 쓰긴했지만..

이 조건을 스스로 생각해내지는 못할 것 같다...

 

 

 

 


https://jamesdreaming.tistory.com/199

 

[ 자바 코딩 ] Java Regular Expression 정규표현식 - IP 주소 패턴

안녕하세요. 제임스 입니다. 이번 포스팅에서는 자바 정규표현식을 이용하여 IP 주소 패턴을 만들어 보겠습니다. IP 주소 패턴은 앞서 작성한 포스팅을 보셨다면 아마 간단하게 만드실 수 있을

jamesdreaming.tistory.com


1.
^
( [0-1]?\\d?\\d|2[0-4]\\d|25[0-5] )[.]
( [0-1]?\\d?\\d|2[0-4]\\d|25[0-5] )[.]
( [0-1]?\\d?\\d|2[0-4]\\d|25[0-5] )[.]
( [0-1]?\\d?\\d|2[0-4]\\d|25[0-5] )
$

^ : 뒤에 오는 문자, 숫자로 정규식을 시작한다.
$ : 종료 시, 행 마지막
[] : 문자열의 해당 위치에 사용될 수 있는 문자
{n} : 앞에 작성된 정규식을 n번 반복하겠다.
() : 그룹
\d : 숫자를 의미
\D : 숫자가 아닌 것을 의미
| : or
//. : 모든 문자 ?
? : 앞에 문자가 있을지 없을지 모름  (ex. ab? : b가 하나일 수도 있고 없을 수도 있음)


2. 쪼개서 이해해보기  : ( [0-1]?\\d?\\d|2[0-4]\\d|25[0-5] ) 이 그룹을 | 을 기준으로 나눔

2-1)  [0-1]?\\d?\\d

* 0~199 (000~199)가 올 때 조건

0 0 0
1번 칸 2번 칸 3번 칸

~

1 9 9
1번 칸 2번 칸 3번 칸

1번 칸에 올 수 있는 수 = 0 또는 1 또는 없을 수도 있다. => [0-1]?

2번 칸에 올 수 있는 수 = 0~9까지의 수이고 없을 수도 있다. => [0-9]?   (\\d?해도 같은 의미)

3번 칸에 올 수 있는 수 = 0~9까지의 수. => [0-9]


2-2) 2[0-4]\\d

* 200~249 가 올 때 조건

2 0 0
1번 칸 2번 칸 3번 칸

~

2 4 9
1번 칸 2번 칸 3번 칸

1번 칸에 올 수 있는 수 = 2 고정 => 2

2번 칸에 올 수 있는 수 = 0~4까지의 수 => [0-4]

3번 칸에 올 수 있는 수 = 0~9까지의 수. => [0-9]


2-3)  25[0-5]

* 250~255가 올 때 조건

2 5 0
1번 칸 2번 칸 3번 칸

~

2 5 5
1번 칸 2번 칸 3번 칸

1번 칸에 올 수 있는 수 = 2 고정 => 2

2번 칸에 올 수 있는 수 = 5 고정 => 5

3번 칸에 올 수 있는 수 = 0~5까지의 수. => [0-5]

 

2-4) 앞에서 작성한 조건을 모두 합치면 0~255가 됨. +중간에 [.]넣어야함

^([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])[.]([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])[.]([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])[.]([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])$

 

반응형

'HackerRank > JAVA' 카테고리의 다른 글

Valid Username Regular Expression  (0) 2024.01.19
[작성중]Java Regex 2 - Duplicate Words  (0) 2024.01.19
java String Tokens  (0) 2024.01.17
Java Anagrams  (0) 2024.01.17
Java String Reverse  (0) 2024.01.17