정규표현식을 공부하고나서 푼 문제이다. https://programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. 4단계 new_id에서 마침표(.)가..
이 글에서는 정리한 정규표현식 목차와 메타 문자 및 수량자를 정리할 예정이다. 기본 메타 문자 . : 모든 문자와 일치 | : 왼쪽 문자 혹은 오른쪽 문자와 일치 [ ] : 문자 집합 구성원 중 하나와 일치 [^] : 문자 집합 구성원을 제외하고 일치 : 범위 정의 ex) 0-9 \ : 다음에 오는 문자를 이스케이프 수량자 : 문자가 없는 경우나 하나 이상 연속하는 문자 찾기 *? : lazy * 문자 : 문자 하나 이상 찾기 +? : lazy + 문자 ? : 문자가 없거나 하나인 문자 찾기 {n} : 정확히 요소와 n번 일치 {m,n} : 요소와 m에서 n번 일치 {n, } : 요소와 n번 이상 일치 {n,}? : lazy {n,} 위치 지정 ^ : 문자열의 시작과 일치 (\A) $ : 문자열의 끝과 ..
예제 코드는 모두 Java 언어를 사용한다. 전방탐색 전방탐색(lookahead) 패턴은 일치 영역을 발견해도 그 값을 반환하지 않는 패턴을 말한다. 전방탐색은 실제로는 하위 표현식이며, 하위 표현식과 같은 형식으로 작성한다. 전방탐색 패턴의 구문은 ?=로 시작하고 등호(=) 다음에 일치할 텍스트가 오는 하위 표현식이다. 일부 정규 표현식 문서에서는 일치하는 영역을 반환하는 동작을 표현할 때 consume이라는 용어를 쓴다. 이럴 경우 전방탐색은 not consume이라고 말한다. 프로토콜은 콜론(:)을 기준으로 호스트 이름과 분리되어 있다. 프로토콜을 찾는 정규표현식을 만들어보자. public class code { public static void main(String[] args) { String ..
예제 코드는 모두 Java 언어를 사용한다. 한 문장이 있고, 이 문장 안에 반복해 나오는 문자, 바로 실수로 같은 단어를 두 번 입력한 오자를 모두 찾고 싶다고 가정해보자. 두 단어가 일치하는지 알려면 먼저 나온 단어가 무엇인지 반드시 알고 있어야 한다. 역참조는 정규 표현식 패턴으로, 앞서 일치한 부분을 다시 가리킨다. (먼저 일치한 단어를 만한다.) 다음 예제에는 반복해 나오는 단어가 세 가지 있고, 이 세 단어를 모두 찾아야 한다. public class code { public static void main(String[] args) { String regex = "[ ]+(\\\\w+)[ ]+\\\\1"; Pattern pattern = Pattern.compile(regex); String[..
예제 코드는 모두 Java 언어를 사용한다. 텍스트 영역 내에 특정 위치에서 텍스트를 찾아야 할 때도 있다. 그러려면 위치 찾기가 필요하며, 이번에 배워볼 것이다. 경계 지정하기 위치 찾기는 텍스트 문자열 안에서 반드시 일치해야 하는 위치를 지정할 때 사용한다. 경계를 사용하거나 패턴 앞이나 뒤에 특정한 위치 혹은 경계를 나타내는 메타 문자를 사용하면 된다. 단어 경계 지정하기 가장 흔하게 쓰는 방법 중 하나로, \b로 표시하는 단어 경계이다. 단어 경계라는 이름에서 유추해 볼 수 있듯이, \b는 단어의 시작이나 마지막을 일치시킬 때 사용한다. public class code { public static void main(String[] args) { String regex = "\\\\ba[0-9]{2..
예제 코드는 모두 Java 언어를 사용한다. 앞서 정규 표현식 패턴은 문자 하나만 찾는 패턴만 살펴보았다. 이제 문자를 여러 개 찾는 방법을 살펴볼 예정이다. 하나 이상의 문자 찾기 문자나 집합에 속한 요소를 하나 이상 찾으려면 간단히 문자 뒤에 더하기(+) 문자를 붙이면 된다. 더하기(+)는 문자가 하나 이상일 때 일치한다. public class code { public static void main(String[] args) { String regex = "a[0-9]+"; Pattern pattern = Pattern.compile(regex); String[] strs = { "a", "a1", "a12", "1a" }; for(String str : strs) { Matcher matcher ..
예제 코드는 모두 Java 언어를 사용한다. 이스케이프 살펴보기 이스케이프(escape)에 대해 이해해야 메타 문자를 더욱 이해할 수 있게 된다. 메타 문자들은 정규 표현식에서 특별한 의미를 가지므로 자기 자신을 문자 그대로 표현할 수 없다. Java 언어에서는 Pattern.compile에서는 컴파일 에러가 발생한다. public class code { public static void main(String[] args) { String regex = "[e"; Pattern pattern = Pattern.compile(regex); String[] strs = { "[eric]", "[]eric" }; for(String str : strs) { Matcher matcher = pattern.mat..
예제 코드는 모두 Java 언어를 사용한다. 여러 문자 중 하나와 일치시키기 모든 문자가 아닌 특정 문자만 일치하는 문자열만 찾고 싶을 때는 메타 문자인 대괄호([])를 사용한다. 대괄호([])는 제목에도 있다시피 문자 집합을 형성한다. 대괄호([]) 안에 있는 문자는 모두 집합의 구성원이 되며, 집합에 속한 문자가 모두 일치할 필요는 없다. public class code { public static void main(String[] args) { String regex = "e.[ic]c"; Pattern pattern = Pattern.compile(regex); String[] strs = { "eric", "ekcc", "e1ic", "erlk" }; for(String str : strs) {..
- Total
- Today
- Yesterday
- C++
- 이펙티브 자바
- Algorithm
- node.js
- kotest
- Effective Java
- MSA
- BOJ
- Kotlin
- Java
- 백준
- BAEKJOON
- 디자인 패턴
- 코테
- 클린 아키텍처
- 클린 코드
- 테라폼
- 디자인패턴
- JPA
- 알고리즘
- 정규표현식
- programmers
- 객체지향
- 프로그래머스
- kkoon9
- AWS
- Olympiad
- Spring
- 이팩티브 자바
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |