정규표현식 (Regular Expressions, Regex)
정규표현식은 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어입니다.
정규표현식을 사용할 때에는 java.util.regex 패키지 안에 있는 Pattern 클래스와 Matcher 클래스를 주로 사용합니다.
정규표현식 문법
정규표현식 | 설명 |
^ | 문자열 시작 |
$ | 문자열 종료 |
. | 임의의 한 문자 (단, \는 넣을 수 없음) |
* | 앞 문자가 없을 수도 무한정 많을 수도 있음 |
+ | 앞 문자가 하나 이상 |
? | 앞 문자가 없거나 하나 있음 |
[ ] | 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타냅니다. [] 내에서 ^ 가 선행하여 존재하면 not을 나타냅니다. |
{ } | 횟수 또는 범위를 나타냅니다. |
( ) | 소괄호 안의 문자를 하나의 문자로 인식 |
| | 패턴 안에서 or 연산을 수행할 때 사용 |
\ | 정규 표현식 역슬래시(\)는 확장문자 ('\' 다음에 일반 문자가 오면 특수문자로 취급하고 '\' 다음에 특수문자가 오면 그 문자 자체를 의미) |
\b | 단어의 경계 |
\B | 단어가 아닌것에 대한 경계 |
\A | 입력의 시작 부분 |
\G | 이전 매치의 끝 |
\Z | 입력의 끝이지만 종결자가 있는 경우 |
\z | 입력의 끝 |
\s | 공백 문자 |
\S | 공백 문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\d | 숫자 [0-9]와 동일 |
\D | 숫자를 제외한 모든 문자 |
(?i) | 앞 부분에 (?!)라는 옵션을 넣어주게 되면 대소문자는 구분하지 않습니다. |
분류 | 정규식 패턴 |
숫자 | ^[0-9]*$ |
영문자 | ^[a-zA-Z]*$ |
한글 | ^[가-힣]*$ |
숫자 + 영문자 | ^[a-zA-Z0-9]*$ |
같은 문자 연속 3회 | ^(\\w)\\1\\1*$ |
생년월일 | ^(19|20)[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1,2][0-9]|3[0,1])$ |
비밀번호 (숫자, 문자 포함 6~12자리) |
^[a-zA-Z0-9]{6,12}$ |
비밀번호 (숫자, 문자, 특수문자 포함 8~15자리) |
^.*(?=^.{8,15}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$ |
이메일 | ^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$ |
휴대전화 | ^01([016789])-\\d{3,4}-\\d{4}$ |
Pattern 클래스
정규표현식에서는 Pattern 클래스의 matches() 메소드를 통해 대상 문자열을 검증할 수 있습니다.
matches() 메서드의 첫번째 매개변수 값은 정규표현식이고, 두번째 매개변수 값은 검증 대상 문자열입니다.
검증 후 대상 문자열이 정규표현식과 일치하면 true, 그렇지 않다면 false 값을 리턴합니다.
- compile(String regex) : 주어진 정규표현식으로부터 패턴을 만듭니다.
- matcher(CharSequence input) : 대상 문자열이 패턴과 일치할 경우 true를 반환합니다.
- asPredicate() : 문자열을 일치시키는 데 사용할 수 있는 술어를 작성합니다.
- pattern() : 컴파일된 정규표현식을 String 형태로 반환합니다.
- split(CharSequence input) : 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리합니다.
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String[] args) {
String pattern = "^[0-9]*$";
String val = "123456789";
boolean regex = Pattern.matches(pattern, val);
System.out.println(regex);
}
}
Matcher 클래스
Matcher 클래스는 대상 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 판별할 때 주로 사용됩니다.
Matcher 객체는 Pattern 객체의 matcher() 메소드를 호출하여 받아올 수 있습니다.
- matches() : 대상 문자열과 패턴이 일치할 경우 true를 반환합니다.
- find() : 대상 문자열과 패턴이 일치하는 경우 true를 반환하고, 그 위치로 이동합니다.
- find(int start) : start 위치 이후부터 매칭 검색을 수행합니다.
- start() : 매칭되는 문자열 시작 위치를 반환합니다.
- start(int group) : 지정된 그룹이 매칭되는 시작 위치를 반환합니다.
- end() : 매칭되는 문자열 끝 다음 문자 위치를 반환합니다.
- end(int group) : 지정된 그룹이 매칭되는 끝 다음 문자 위치를 반환합니다.
- group() : 매칭된 부분을 반환합니다.
- group(int group) : 매칭된 부분 중 group번 그룹핑 매칭 부분을 반환합니다.
- groupCount() : 패턴 내 그룹핑한 전체 갯수를 반환합니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("^[a-zA-Z]*$");
String val = "abcdef";
Matcher matcher = pattern.matcher(val);
System.out.println(matcher.find());
}
}
728x90
반응형
'안드로이드 > 개념' 카테고리의 다른 글
[Android] Rx와 Observable (0) | 2023.11.03 |
---|---|
[Android] 앱 아키텍처 패턴 (MVC, MVP, MVVM, MVI) (0) | 2023.10.27 |
[Android] LiveData (0) | 2023.10.09 |
[Android] ViewBinding과 DataBinding (0) | 2023.10.08 |
[Android] Touch (0) | 2023.10.06 |