티스토리 뷰
예제 코드는 모두 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.matcher(str);
if (matcher.find()) {
System.out.println("str 안에 " + regex + " 문자열이 존재한다.");
} else {
System.out.println("str 안에 " + regex + " 문자열이 존재하지 않는다.");
}
}
}
}
정규표현식 [2]에서도 설명했듯이, 메타 문자는 그 앞에 역슬래시를 붙여 문자 그대로 해석되게(이스케이프) 할 수 있다.
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.matcher(str);
if (matcher.find()) {
System.out.println("str 안에 " + regex + " 문자열이 존재한다.");
} else {
System.out.println("str 안에 " + regex + " 문자열이 존재하지 않는다.");
}
}
}
}
/*
str 안에 \\[e 문자열이 존재한다.
str 안에 \\[e 문자열이 존재하지 않는다.
*/
🐻 Java에서 역슬래시를 사용하려면 역슬래시 4개를 연달아 사용해야한다. ex) \\\\
공백 문자 찾기
메타 문자는 일반적으로 두 가지 범주로 나뉜다.
- 텍스트와 일치하는 문자 ex) 마침표(.)
- 정규 표현식 문법의 일부로 쓰는 문자 ex) 대괄호([])
공백 메타 문자를 살펴보자.
정규 표현식 검색을 수행할 때, 공백 문자들을 찾아야 할 때가 있다.
탭문자를 모두 찾거나 줄바꿈 문자 같은 공백 문자 말이다.
아래 표는 공백 메타 문자를 정리한 것이다.
메타 문자 | 설명 |
[\b] | 백스페이스 |
\f | 페이지 넘김 |
\n | 줄바꿈 |
\r | 캐리지 리턴 |
\t | 탭 |
\v | 수직 탭 |
public class code {
public static void main(String[] args) {
String regex = "[\\\\n\\\\t]";
Pattern pattern = Pattern.compile(regex);
String[] strs = {
"[eric]\\n\\n\\n",
"[]eric\\t\\t\\t"
};
for(String str : strs) {
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println("str 안에 " + regex + " 문자열이 존재한다.");
} else {
System.out.println("str 안에 " + regex + " 문자열이 존재하지 않는다.");
}
}
}
/*
str 안에 [\\n\\t] 문자열이 존재한다.
str 안에 [\\n\\t] 문자열이 존재한다
*/
str 안에 [\n\t] 문자열이 존재한다. str 안에 [\n\t] 문자열이 존재한다.
특정한 문자 형태와 일치시키기
자주 쓰는 문자 집합들은 특수한 메타 문자로 대신하기도 한다.
이런 메타 문자들을 문자 클래스라고 부른다.
숫자와 숫자가 아닌 문자 찾기
메타 문자 | 설명 | 같은 표현 |
\d | 숫자 하나( | [0-9] |
\D | 숫자를 제외한 문자 하나 | [^0-9] |
public class code {
public static void main(String[] args) {
String regex = "\\\\D";
Pattern pattern = Pattern.compile(regex);
String[] strs = {
"eric",
"123456789"
};
for(String str : strs) {
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println("str 안에 " + regex + " 문자열이 존재한다.");
} else {
System.out.println("str 안에 " + regex + " 문자열이 존재하지 않는다.");
}
}
}
}
/*
str 안에 \\D 문자열이 존재한다.
str 안에 \\D 문자열이 존재하지 않는다.
*/
영숫자 문자와 영숫자가 아닌 문자 찾기
영숫자 문자로, 대문자와 소문자를 포함한 알파벳 A부터 Z, 숫자, 밑줄을 포함한다.
메타 문자 | 설명 | 같은 표현 |
\w | 대소문자와 밑줄을 포함하는 모든 영숫자 | [a-zA-Z0-9_] |
\W | 영숫자나 밑줄이 아닌 모든 문자 | [^a-zA-Z0-9_] |
public class code {
public static void main(String[] args) {
String regex = "\\\\w";
Pattern pattern = Pattern.compile(regex);
String[] strs = {
"123",
"_",
"abc",
"ABC",
"\\n\\t"
};
for(String str : strs) {
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println("str 안에 " + regex + " 문자열이 존재한다.");
} else {
System.out.println("str 안에 " + regex + " 문자열이 존재하지 않는다.");
}
}
}
}
/*
str 안에 \\w 문자열이 존재한다.
str 안에 \\w 문자열이 존재한다.
str 안에 \\w 문자열이 존재한다.
str 안에 \\w 문자열이 존재한다.
str 안에 \\w 문자열이 존재하지 않는다.
*/
공백 문자와 공백이 아닌 문자 찾기
이번엔 살펴볼 분류는 공백 클래스다.
메타 문자 | 설명 | 같은 표현 |
\s | 모든 공백 문자 | [\f\n\r\t\v] |
\S | 공백 문자가 아닌 모든 문자 | [^\f\n\r\t\v] |
백스페이스 메타 문자인 [\b]는 포함되지 않는다.
16진수와 8진수 표현하기
- 16진수 : \x
- 8진수 : \0
'개발 방식 연구 > 정규표현식' 카테고리의 다른 글
정규표현식 [6] 위치 찾기 (0) | 2022.01.08 |
---|---|
정규표현식 [5] 반복 찾기 (0) | 2022.01.08 |
정규표현식 [3] 문자 집합으로 찾기 (0) | 2022.01.08 |
정규표현식 [2] 문자 하나 찾기 (0) | 2022.01.08 |
정규표현식 [1] 언어에서 활용하는 정규 표현식 (0) | 2022.01.08 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코테
- BOJ
- JPA
- 이펙티브 자바
- 클린 코드
- 이팩티브 자바
- kkoon9
- AWS
- 테라폼
- Olympiad
- 객체지향
- node.js
- Java
- 프로그래머스
- Spring Boot
- MSA
- 정규표현식
- Kotlin
- 백준
- 디자인패턴
- C++
- 디자인 패턴
- Effective Java
- programmers
- 알고리즘
- 클린 아키텍처
- Algorithm
- Spring
- kotest
- BAEKJOON
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
글 보관함