자바 정규표현식

Ada·2022년 9월 26일
0

항해TOL

목록 보기
6/63
post-custom-banner

프로그래머스 연습문제

문자열 다루기 기본

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

import java.util.*;

class Solution {
  public boolean solution(String s) {
        if (s.length() == 4 || s.length() == 6) return s.matches("(^[0-9]*$)");
        return false;
  }
}

위의 코드를 보고 충격받아서 정규표현식을 공부해보기로 했다..... 아래는 내가 푼 코드...

class Solution {
    public boolean solution(String s) {
        boolean answer = true;
        char strToChar[] = s.toCharArray();
        int[] intArr = {1,2,3,4,5,6,7,8,9};
        if (s.length() == 4 || s.length() == 6) {
            for (int i = 0; i < s.length(); i++) {
                if(!Character.isDigit(strToChar[i])){
                    answer = false;
                }
            }
        } else {
            answer = false;
        }
        return answer;
    }
}

정규표현식이란?

"특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어"

정규 표현식의미
^[0-9]*$ == \d숫자
^[a-zA-Z]*$알파벳
^[가-힣]*$한글
^[a-zA-Z0-9]알파벳이나 숫자
^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-z]+$이메일(Email)
\w+@\w+.\w+(\.\w+)?이메일(Email)


Pattern 클래스

  • 정규 표현식에 대한 문자열글 검증하는 기능
  • 공개된 생성자를 제공하지 않음
  • 패턴을 생성하려면 Pattern 객체를 반환하는 정적 compile 메소드를 호출해야 함
  • matches() 메소드를 활용하여 검증
  • regex: 정규 표현식
  • input: 검증할 문자열
public static boolean matches(String regex, CharSequence input) {
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        return m.matches();
    }

Matcher 클래스

  • 패턴을 해석하고 입력 문자열에 대해 일치 작업을 수행하는 엔진
  • Pattern 클래스와 동일하게 어떠한 공개된 생성자도 정의하고 있지 않음
  • Pattern 객체의 matcher() 메소드를 호출해서 얻음
  • matches() 메소드를 활용하여 검증
  • regex: 정규 표현식
  • input: 검증할 문자열
	/**
     * Creates a matcher that will match the given input against this pattern.
     *
     * @param  input
     *         The character sequence to be matched
     *
     * @return  A new matcher for this pattern
     */
    public Matcher matcher(CharSequence input) {
        if (!compiled) {
            synchronized(this) {
                if (!compiled)
                    compile();
            }
        }
        Matcher m = new Matcher(this, input);
        return m;
    }

예제

 // 01(0|1)-\d{3,4}-\d{4}
 //010 또는 011 "-" 숫자가 3자리 혹은 4자리 "-" 숫자 4자리

@Test
 public void example(){
    String pattern = "01(0|1)-\\d{3,4}-\\d{4}";
    
    assertTrue("010-8282-1234".matches(pattern));
    assertTrue("010-828-1234".matches(pattern));
    
    assertFalse("011-12-1234".matches(pattern));
 }

(참고:https://zzang9ha.tistory.com/322)

profile
백엔드 프로그래머
post-custom-banner

0개의 댓글