정규표현식 (Regular Expressions, Regex)
정규표현식은 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어입니다.
정규표현식을 사용할 때에는 java.util.regex 패키지 안에 있는 Pattern 클래스와 Matcher 클래스를 주로 사용합니다.
정규 표현식 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 노란색 강조 부분은 다음 정규식을 사용했을 때 매치된 것이다. 스티븐 클레이니는 정규 표현식의 개념을 설립한 공로자이다. 정규 표현식(正規表現式, 영어: r
ko.wikipedia.org
정규표현식 문법
정규표현식 | 설명 |
^ | 문자열 시작 |
$ | 문자열 종료 |
. | 임의의 한 문자 (단, \는 넣을 수 없음) |
* | 앞 문자가 없을 수도 무한정 많을 수도 있음 |
+ | 앞 문자가 하나 이상 |
? | 앞 문자가 없거나 하나 있음 |
[ ] | 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타냅니다. [] 내에서 ^ 가 선행하여 존재하면 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 |