[Java] 정규표현식(Regular Expression)

Kim yeonhee·2024년 12월 6일

Java

목록 보기
1/3

정규표현식(Regex; Regular Expression)을 정리하게 된 데에는...
프로그래머스 문제를 풀고 나서 다른 사람의 풀이를 봤는데
나는 복잡하게 푼 문제를 다른 사람은 정규식을 사용해서 무려 한줄로 풀었다..!
다음엔 나도 꼭 효율적으로 풀 것이라 다짐하며...
(짧은 코드가 무조건 효율적이라는건 아니지만 저는 그에 비해 비효율적으로 코드를 짰습니다.)




💡정규 표현식(Regular Expression)이란?

정규표현식이란 문자열 데이터 중에서 원하는 조건(패턴)과 일치하는 문자열 부분을 찾아내기 위해 사용하는 것으로, 미리 정의된 기호와 문자를 이용해서 작성한 문자열을 말한다.

개발을 할 때 전화번호, 주민번호, 이메일 등과 같이 정해져있는 형식이 있고 사용자가 그 형식대로 제대로 입력했는지 검증해야 하는 경우 정규 표현식을 사용하면 쉽게 구현할 수 있다.


정규식을 이용하면 많은 양의 텍스트 파일 중 원하는 데이터를 손쉽게 뽑아낼 수 있고, 입력된 데이터가 형식에 맞는지 체크할 수 있다. 하지만 문자 기호 조합으로 가독성이 떨어진다는 단점이 있다.

📚 자바 외의 대부분의 언어들도 정규 표현식을 지원하며, 사용법은 언어마다 차이가 있지만 거의 비슷하다.



정규식 기본 기호

기호 설명 예제
. 임의의 문자 1개를 의미한다.
^ 시작을 의미한다.
[] 괄호 안에 있다면 일치하지 않는 부정의 의미로 쓰인다.
^a : a로 시작하는 단어
[^a] : a가 아닌 철자인 문자 1개
$ $ 앞의 문자열로 문자가 끝나는 지를 의미한다. a$ : a로 끝나는 단어
[] [] 괄호 안의 문자가 있는지를 확인한다. [ab][cd] : a, b중 한 문자와 c,d중 한 문자
→ ac ad bc bd
[^] [] 대괄호 안에 ^ 문자가 있으면 제외를 뜻한다.
- 대괄호 안에 ^가 쓰이면 제외의 뜻
- 대괄호 밖에 ^가 쓰이면 시작점의 뜻
[^a-z] : 알파벳 소문자 a부터 z를 제외한 모든 문자
- 사이의 문자 혹은 숫자를 의미한다. [a-z] : 알파벳 소문자 a부터 z까지 하나
[a-z0-9] : 알파벳 소문자 전체, 0~9중 한 문자
| 또는 [a|b] : a 혹은 b
() 그룹 01(0|1) : 01 뒤에 0 또는 1이 들어간다.
→010(o), 011(o), 012(x)
{} 개수 a{3}b : a가 3번 온 후 b가 온다
→ aab(x), aaab(o), aaaab(o)
\b 공백, 탭, ",", "/" 등을 의미한다. apple\b : apple 뒤에 공백 탭 등이 있다.
→ apple juice (o), apple.com (x)
\B \b의 부정
공백 탭등이 아닌 문자인 경우 매치한다.
apple\B
→ apple.com (o)
\d 0~9 사이의 숫자
[0~9]와 동일
\D \d의 부정
숫자가 아닌 어떤 문자, [^0~9]와 동일
\s 공백, 탭
\S 공백, 탭이 아닌 문자
\w 알파벳 대소문자 + 숫자 + "_"
[a-zA-Z_0-9]와 동일
\W \w의 부정
[^a-zA-Z_0-9]와 동일

정규식 수량 기호

기호 설명 예제
? 앞의 표현식이 없거나 or 최대 한개만 a1? : 1이 최대 한개만 있거나 없을 수도 있다.
→ a(o), a1(o), a11(x), a111(x)
* 앞의 표현식이 없거나 or 있거나(여러개) a1* : 1이 있을 수도 없을 수도 있다.
→ a(o), a1(o), a11(o), a111(o)
+ 앞의 표현식이 1개 이상 or 여러개 a1+ : 1이 1개 이상 있다.
→ a(x), a1(o), a11(o), a111(o)
{n} 딱 n개 있다. a{3} : a가 딱 3개 있다.
→ aa(x), aaa(o), aaaa(x), aaaaaaaa(x)
{n, m} n개 이상 m개 이하 a{3,5} : a가 3개 이상 5개 이하 있다.
→ aa(x), aaa(o), aaaa(o), aaaaaaaa(x)
{n, } n개 이상 a{3,} : a가 3개 이상 있다.
→ aa(x), aaa(o), aaaa(o), aaaaaaaaa(o)

정규식 그룹 캡쳐 기호

()로 그룹화 한다고 했을 때 이를 '캡쳐한다'고 한다.

기호 설명
0 그룹 및 캡쳐
(?:) 찾지만 그룹에 포함 안됨
(?=) =앞 문자를 기준으로 전방 탐색
(?<=) =뒤 문자를 기준으로 후방 탐색



🤓 마치며...
내용은 새롭게 계속 알아낼 때 마다 업데이트 될 것입니다..!!!!
완벽하게 이해하고 사용하는 그날 까지 달려달려. 렛츠고!!!





출처/참고한 글:
[Java] 정규표현식(RegExp) 이해하기 : 패턴, 문자 클래스, 자주 사용 패턴
How to build Regular Expression in Java - TARA RAM GOYAL
자바 정규식(Regular Expression)사용법 정리 - 인파
정규표현식 그룹 캡쳐 활용 - 패턴 일치부분 가져오기

0개의 댓글