JAVA_Regular Expression

승주😊·2021년 3월 30일
0

JAVA

목록 보기
6/7
post-thumbnail

정규 표현식

정규표현식이란?

  • 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 언어! (Ex. 전화번호, 주민번호, 이메일 등등)
  • 정해진 형식이 맞는 지 검증해야할 때 정규표현식 사용!

문자열 객체에서 자주 사용되는 정규식 메소드

- boolean matches(String regex)
  : 인자로 주어진 정규식에 매칭되는 값이 있는지 검사합니다. 

- String replaceAll(String regex,String replacement)
  : 문자열 내에 있는 정규식 regex와 매치되는 모든 문자열을 replacement문자열로 교체합니다. 

- String[] split(String regex)
  : 인자로 주어진 정규식과 매치되는 문자열을 구분자로 하여 분할합니다. 

정규식을 다루는 객체

객체설명
Pattern 객체- 정규식의 컴파일된 표현이다.
- Pattern 객체의 경우 공개된 생성자를 제공하지 않는다.
- 패턴을 생성하려면 Pattern 객체를 반환하는 정적 compile 메소드를 호출해야한다.
- 이 메소드는 첫 번쨰 인자로 정규식 문자열을 받아온다.
Matcher 객체- 패턴을 해석하고 입력 문자열에 대해 일치 작업을 수행하는 객체
- Matcher도 공개된 생성자를 정의하고 있지 않는다.
- Matcher 객체는 Pattern객체의 matcher메소드를 호출해서 얻는다.
PatternSyntaxException 객체정규식 패턴의 문법 오류를 나타내는 unchecked예외이다.

예제

import java.util.regex.Matcher; //패키지 import

import java.util.regex.Pattern;

public class PatternTest {

    public static void main(String[] args) {

        StringBuilder sb = new StringBuilder();

        Pattern pattern = Pattern.compile("<[^<>]*>"); //패턴 지정

        Matcher matcher = pattern.matcher("배를 먹습니다. <br />사과를 먹습니다.");


        boolean found = false;

        while(matcher.find()) {

            sb.append("텍스트 \"")

              .append(matcher.group())      // 찾은 문자열 그룹.

              .append("\"를 찾았습니다.\n")

              .append("인덱스 ")

              .append(matcher.start())      // 찾은 문자열의 시작 위치

              .append("에서 시작하고, ")

              .append(matcher.end())        // 찾은 문자열의 끝 위치

              .append("에서 끝납니다.\n");

              found = true;

        }

        if(!found) {

            sb.append("찾지 못했습니다.");

        }

        System.out.println(sb.toString());

    }

}

[결과]

텍스트 "<br />"를 찾았습니다.

인덱스 9에서 시작하고, 15에서 끝납니다.

Metacharacters

Metacharacters는 Regex의 패턴에서 어떤 문자가 특별한 의미를 가지는 것을 말한다.

  1. 매칭될 문자를 지정하거나 제외하는 방법
자주 사용되는 표현설명
.어떤 문자 1개를 의미
[abc]a,b,c 중 하나이면 일치합니다.
[^abc]a,b,c를 제외한 다른 글자 이면 일치
[a-zA-z]a부터 z까지 소문자 알파벳이거나 A부터 Z까지의 대문자 알파벳 중 하나라면 일치
[a-d[m-p]]a부터 d까지, 또는 m부터 p까지 중에 하나이면 일치합니다. (합집합)
[a-z&&[def]]d,e,f중 하나이면 일치합니다. (교집합)
[a-z &&[^m-p]]m부터 p까지를 제외한, a부터 z중 하나이면 일치합니다. (차집합)

자주 사용되는 정규 표현식

1. 숫자 모양에 대한 형식 검사
   "^[0-9]*$"

2. 영문으로만 구성되었는지에 대한 형식 검사
  "^[a-zA-Z]*$"

3. 한글로만 구성되었는지에 대한 형식 검사
  "^[ㄱ-ㅎ가-힣]*$"

4. 영문과 숫자로만 구성되었는지에 대한 형식 검사
   "^[a-zA-Z0-9]*$"

5. 한글과 숫자로만 구성되었는지에 대한 형식 검사
  "^[ㄱ-ㅎ가-힣0-9]*$"

6. 이메일 형식인지에 대한 검사. "아이디@도메인"의 형식을 충족해야 한다.
  "[0-9a-zA-Z]+(.[_a-z0-9-]+)*@(?:\\w+\\.)+\\w+$"

7. "-"없이 핸드폰번호인지에 대한 형식검사.
  "^01(?:0|1|[6-9])(?:\\d{3}|\\d{4})\\d{4}$"

8. "-"없이 전화번호인지에 대한 형식검사. 각 부분에 대한 자리수도 충족시켜야 한다.
  "^\\d{2,3}\\d{3,4}\\d{4}$"

9. "-"없이 주민번호에 대한 글자수 및 뒷자리 첫글자가 1~4의 범위에 있는지에 대한 검사
  "^\\d{6}[1-4]\\d{6}"

예제


import java.util.regex.Pattern;
//이 패키지를 통해 정규 표현 검사 활용!

public class Test05 {
	

	public static void main(String[] args) {
		
		//회원 가입시에 입력한 내용들을 저장해보기!
		String name = "홍길동";
		String age = "20";
		String email = "user@naver.com";
	
		//이름이 한글인지 여부를 검사
		boolean isKor = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", name);
		if(!isKor) { //한글이 아닌 경우 
			System.out.println("이름을 한글로 입력해 주세요");
			return ; //
		}
		 
		//나이가 숫자인지 검사
		boolean isNum = Pattern.matches("^[0-9]*$",age);
		if(!isNum){
			System.out.println("나이는 숫자로 입력해 주세요");
			return;
		}
		
		//이메일 형식인지 검사
		boolean isemail = Pattern.matches("^[_a-zA-Z0-9-\\.]+@[\\.a-zA-Z0-9-]+\\.[a-zA-Z]+$",email);
		if(!isemail){
			System.out.println("이메일 형식이 잘못되었습니다.");
			return;
		}
				
	}
}
profile
All the Best❤

0개의 댓글