본문 바로가기
면접

정규 표현식

by L3m0n S0ju 2023. 6. 30.

 

 

정규 표현식

 

정규 표현식(Regular Expression 또는 Regex)은 문자열 패턴을 나타내기 위한 형식 언어입니다. 정규 표현식은 텍스트에서 특정 패턴을 찾거나 매칭하는 데 사용됩니다.

정규 표현식은 다양한 메타문자, 문자 클래스, 반복자 등의 특수한 기호와 조합으로 구성됩니다. 각각의 기호는 특정한 의미를 가지며, 특정 패턴을 표현하기 위해 사용됩니다. 일반적으로 정규 표현식에서 사용되는 몇 가지 기호와 용어는 다음과 같습니다:

  1. 메타문자(Metacharacters): 정규 표현식에서 특별한 의미를 가지는 문자로, 예를 들면 ".", "^", "$", "*", "+", "?", "{", "}", "[", "]", "(", ")" 등이 있습니다.
  2. 문자 클래스(Character Class): 대괄호 "[ ]" 내에 포함된 문자들의 집합을 나타냅니다. 예를 들어, "[abc]"는 "a", "b", "c" 중 하나의 문자와 매칭됩니다.
  3. 반복자(Quantifiers): 문자나 문자 클래스 뒤에 사용되며, 해당 문자 또는 문자 클래스의 반복 횟수를 나타냅니다. "*"는 0번 이상의 반복, "+"는 1번 이상의 반복, "?"는 0번 또는 1번의 반복을 나타냅니다.
  4. 특수한 시퀀스(Special Sequences): 역슬래시 "" 뒤에 특정한 문자를 사용하여 특수한 패턴을 표현합니다. 예를 들어, "\d"는 숫자를 나타내며, "\s"는 공백 문자를 나타냅니다.
  5. 앵커(Anchors): 문자열의 시작이나 끝을 나타내는 기호로, "^"는 문자열의 시작, "$"는 문자열의 끝을 나타냅니다.

정규 표현식은 다양한 프로그래밍 언어와 텍스트 편집기에서 지원되며, 문자열 검색, 추출, 대체, 유효성 검사 등 다양한 용도로 활용됩니다. 정규 표현식은 강력하면서도 유연한 패턴 매칭 도구로, 복잡한 문자열 처리 작업을 간편하게 수행할 수 있습니다. 하지만 학습과 이해가 필요한 언어이기도 하기 때문에 사용 시 주의가 필요합니다.

 

정규 표현식 예시

 

ex) "([0-9]+)([a-z]+)" => 숫자로 이루어진 그룹과 알파벳으로 이루어진 그룹으로 구성되는 패턴을 나타냅니다. 이 정규 표현식을 사용하면 "123abc"와 같은 문자열에서 숫자 그룹과 알파벳 그룹을 추출할 수 있습니다.

 

ex) [a-zA-Z0-9]{7} => 영문 대소문자와 숫자 7개의 연속된 문자열과 일치하는 패턴을 나타냅니다.

 

 

백준 - 4659


import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) throws IOException {
        List<Character> vowel = new ArrayList<>(Arrays.asList('a', 'e', 'i', 'o', 'u'));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        while(true) {
            String str= st.nextToken();
            if(str.equals("end")) {
                break;
            }

            String regex = "^[^aeiou]+$|[aeiou]{3,}|[^aeiou]{3,}|([^eo])\\1+";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(str);
            String result = matcher.find()?"not acceptable.":"acceptable.";
            System.out.println("<"+str+"> is " + result);
            st = new StringTokenizer(br.readLine());
        }
    }
}

 

 

^[^aeiou]+$ => ^은 시작, $은 끝, []은 집합, []안에 ^는 부정, +는 한개 이상의 문자 의미, 즉 aeiou를 제외한 어떠한 문자가 한개 이상 나오고 끝나면 패턴에 해당됨

 

[aeiou]{3,} => aeiou 문자가 3번 이상 나오면 패턴에 해당

 

([^eo])\\1+ => eo를 제외한 문자들을 ()을 통해 그룹에 포함, \\1은 첫번째 그룹을 의미, +는 첫번째 그룹이 한번 더 나오는 것을 의미, 즉 eo 제외한 문자들이 2번이상 반복되면 패턴에 해당

'면접' 카테고리의 다른 글

CS 지식 질문  (0) 2023.08.31
스프링과 nestjs의 차이점  (0) 2023.07.01
데이터베이스 질문  (0) 2023.05.17
Spring 질문  (0) 2023.05.17
DevOps 이것저것  (0) 2023.04.06

댓글