정규표현식 (짧게는 정규식)은 문자열의 패턴을 확인하고, 일부 일치하는 정보를 추출하며, 문자열이 특정 패턴에 맞는지 확인할 수 있는 형식 언어입니다.
1. 정규표현식 패턴 (Regular Expression Pattern)
1.1 문자 클래스 (Character classes)
- 문자와 숫자를 구분하는 것처럼 문자 종류를 구분하는 데 사용합니다.
정규식 패턴 | 설명 | 패턴 종류 | 예제 |
\\w | 문자만 허용 | (a-z, A-Z, 0-9, ...) | String regExp = "^[\\w]*$"; |
\\W | 문자가 아닌 경우에만 허용 | ! (a-z, A-Z, 0-9, ...) | String regExp = "^[\\W]*$"; |
\\d | 숫자만 허용 | (0-9) | String regExp = "^[\\d]*$"; |
\\D | 숫자가 아닌 경우에만 허용 | ! (0-9) | String regExp = "^[\\D]*$"; |
\\s | 공백 문자, 탭만 허용 | (space, tab, newline) | String regExp = "^[\\s]*$"; |
\\S | 공백 문자, 탭 이외에만 허용 | ! (space, tab, newline) | String regExp = "^[\\S]*$"; |
1.2 어설션 (Assertion)
- 행이나 단어의 시작/끝을 나타내는 경계와 어떤식으로든 매치가 가능한 것을 나타내는 다른 패턴을 포함합니다.
정규식 패턴 | 설명 | 예제 |
^ | 문장의 시작 (특정 문자열로 시작) | String regExp = "^www"; |
$ | 문장의 끝 (특정 문자열로 끝남) | String regExp = "com$"; |
1.3 수량자 (Quantifiers)
- 일치 시킬 문자 또는 표현식의 수를 의미합니다.
정규식 패턴 | 설명 |
? | 없거나 있거나 (zero or one) |
* | 없거나 많거나 (zero or more) |
+ | 하나 또는 많이 (one or more) |
{n} | n개가 있는 |
{min,} | 최소 |
{min, max} | 최소, 그리고 최대 |
1.4 그룹과 범위 (Group and Range)
- 정규식 문법을 그룹화하거나 범위를 지정할 때 사용하는 패턴입니다.
정규식 패턴 | 설명 |
() | 그룹 |
[] | 문자셋, 괄호 안의 어떤 문자든 |
[^] | 부정 문자셋, 괄호 안의 어떤 문자가 아닐 때 |
(?:) | 찾지만 기억하지는 않음 |
2. 정규식을 위한 정규 메서드
- 해당 정규식을 기반으로 유효성 검증을 수행할지 아니면 치환할지에 대해 정합니다.
2.1 Pattern Class
2.2 Matcher Class
2.3 replaceAll Class
3. 문자 클래스를 이용한 정규식 사용 예시
3.1 문자 클래스를 이용한 정규식 수행
정규식 패턴 | 설명 |
"^[\\w]*$" | 문자열만 허용하는 정규식 - 공백 미허용 |
"^[\\W]*$" | 문자열만 허용하는 정규식 - 공백 허용 |
// 1. 문자열만 허용하는 정규식 - 공백 미허용
public static final String REGEXP_PATTERN_CHAR = "^[\\w]*$";
// 2. 문자열만 허용하는 정규식 - 공백 허용
public static final String REGEXP_PATTERN_NO_CHAR = "^[\\W]*$";
String str1 = "hello"; // 문자열 단일
String str2 = "hello23"; // 문자열과 숫자
String str3 = "안녕하세요 :D"; // 문자열과 특수문자
String tabStr = "hello "; // 탭 포함 문자열
String spaceStr = "hello "; // 스페이스바 포함 문자열
/*
* 문자열이 맞는지 확인하는 정규식을 수행합니다.
*/
Boolean checkStr1 = Pattern.matches(REGEXP_PATTERN_CHAR, str1); // true
Boolean checkStr2 = Pattern.matches(REGEXP_PATTERN_CHAR, str2); // true
Boolean checkStr3 = Pattern.matches(REGEXP_PATTERN_CHAR, str3); // false
Boolean checkStr4 = Pattern.matches(REGEXP_PATTERN_CHAR, tabStr); // false
Boolean checkStr5 = Pattern.matches(REGEXP_PATTERN_CHAR, spaceStr); // false
/*
* 문자열이 아닌지 확인하는 정규식을 수행합니다.
*/
Boolean checkNonStr1 = Pattern.matches(REGEXP_PATTERN_NONCHAR, str1); // false
Boolean checkNonStr2 = Pattern.matches(REGEXP_PATTERN_NONCHAR, str2); // false
Boolean checkNonStr3 = Pattern.matches(REGEXP_PATTERN_NONCHAR, str3); // false
Boolean checkNonStr4 = Pattern.matches(REGEXP_PATTERN_NONCHAR, tabStr); // false
Boolean checkNonStr5 = Pattern.matches(REGEXP_PATTERN_NONCHAR, spaceStr); // false
계속 작성을 이어가고 있습니다...
참고 출처
'프로그래밍 언어' 카테고리의 다른 글
[프로그래밍 기초] 명령형 vs. 선언형 프로그래밍 (0) | 2024.02.07 |
---|---|
[스크립트 언어] 스크립트 언어의 특징과 클라우드에서 선호되는 이유 (0) | 2024.01.02 |