정규식이란
정규식은 텍스트 데이터 중 원하는 조건과 일치하는 문자열을 찾아내기 위해 사용하는 것으로,
미리 정의된 기호와 문자를 이용해서 작성한 문자열을 말한다.
정규식 사용법
java.util.regex.* 을 사용한다.
패턴을 만들어두고, 해당 패턴과 일치하는 지를 확인한다.
import java.util.regex.*; // Pattern과 Matcher가 속한 패키지
class RegularEx1 {
public static void main(String[] args)
{
String pattern = "c[a-z]*"; //c로 시작하고 a~z사이의 단어가 없거나 1개이상 있을수도 있음.
String val = "count";
boolean regex = Pattern.matches(pattern,val);
System.out.println(regex); // true반환
}
}
String클래스에서도 Regex를 지원하는 메소드들이 있다.
메서드 | 설명 |
String,matches(regex) | String이 regex와 일치하면 true반환 |
String.split(regex) | regex와 일치하는 것을 기준으로 String 분리하여 배열 반환 |
String.replaceFirst(regex,replacement) | 가장 먼저 regex와 일치하는 것을 replacement로 변환 |
String.replaceAll(regex, replacement) | regex와 일치하는 모든 것을 replacement로 변환 |
import java.util.Arrays;
class RegularEx2 {
public static void main(String[] args) {
String pattern = "[0-9]"; // 숫자
String str = "ex1 ex2 ex3";
// false반환: 숫자하나로만 이루어지지 않았기때문
System.out.println(str.matches(pattern));
String[] arr = str.split(pattern);
System.out.println(Arrays.asList(arr));
System.out.println(str.replaceFirst(pattern, "|"));
System.out.println(str.replaceAll(pattern, "|"));
}
}
false
[ex, ex, ex]
ex| ex2 ex3
ex| ex| ex|
정규표현식 문법
표현법 | 설명 |
. | 임의의 문자(\불가) |
* | 0 또는 1개 이상을 의미 |
.* | 모든 문자열 |
C. | C로 시작하는 두 자리 문자열 |
C.* | C로 시작하는 모든 문자열 |
^ | 문자열의 시작 ^regex. 만약 [ ] 내부에서 쓰인다면 제외를 뜻함. [^abc] a,b,c를 제외한 문자1개. |
$ | 문자열 종료 regex$ |
+ | 앞의 문자가 하나 이상 |
? | 앞의 문자가 없거나 하나 |
[ ] | 문자의 집합이나 범위. 두 문자 사이는 - 로 표시 [0-9], [a-z], [A-Z],[1-3a-z] |
{d} | 회수 또는 범위. {d} d번 나옴. {d,} d번 이상 나옴. {2,3} 2번이상 3번이하로 나옴. |
( ) | 소괄호 안 문자 1개로 인식. |
| | or 표시. [a|b] a나 b 중 하나. |
&& | and 표시. [a-z&&[^bc]] b와 c를 제외한 a-z안의 문자. |
(?!) | 대소문자 구분 x |
\d | 숫자. [0-9] 동일. |
\D | 숫자 제외. [^0-9] |
\s | 공백문자 |
\S | 공백 문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\b | 단어의 경계(공백) |
참조
'Java의 정석' 책
'Language > Java' 카테고리의 다른 글
[Java] 쓰레드 1 - 구현 및 실행(start, run) (0) | 2022.03.13 |
---|---|
[Java] 제네릭(Generic) (0) | 2022.03.11 |
[Java] Objects 클래스 (0) | 2022.03.08 |
[Java] 래퍼(wrapper) 클래스 (0) | 2022.03.08 |
[Java] String, StringBuffer, StringBuilder 클래스 (0) | 2022.03.07 |
댓글