728x90
반응형
[해커랭크(HackerRank) JAVA 풀이] - Java Regex
이전 글에서 해커랭크 문제를 풀다가, 자바 정규식에 대해 좀 더 알아볼 필요성을 느꼈다.
자바 정규표현식 사용법에 대해 자세히 알아보자.
정규표현식 혹은 정규식
특정한 규칙을 가진 문자열의 잡합을 표현하는데 사용되는 언어.
자바 정규 표현식
자바에서 정규표현식을 사용하기 위해 java.util.regex 패키지에 있는 클래스들을 사용한다.
주로 Pattern, Matcher 클래스가 사용된다.
Pattern 클래스
정규식 이용하여 문자열에 대한 검증을 수행
Pattern.matcher(String regex, CharSequence input) | 대상이 되는 문자열과 정규식이 일치할 경우 true 아닌경우 false 반환 |
Pattern.pattern() | 컴파일된 정규표현식을 String 형태로 반환 |
Pattern.compile(String regex) | 컴파일된 정규 표현식을 반환 |
Pattern.asPredicate() | 문자열을 일치시키는데 사용할 수 있는 술어를 작성 |
Pattern.split(CharSequence input) | 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리 |
Matcher 클래스
정규식을 이용하여 문자열 내에 일치하는 문자열을 찾고 존재여부를 반환
matches() | 대상 문자열과 패턴이 일차할 경우 true 반환 |
find() | 대상 문자열과 패턴이 일치할 경우 true 반환, 그 위치로 이동 |
find(int start) | start 위치 이후부터 매칭검색 수행 |
start() | 매칭되는 문자열 시작위치 반환 |
start(int group) | 지정된 그룹이 매칭되는 시작위치 반환 |
end() | 매칭되는 문자열 끝 위치 다음 문자위치 반환 |
end(int group) | 지정된 그룹이 매칭되는 끝 위치 다음 문자위치 반환 |
group() | 매칭된 부분 반환 |
group(int group) | 매칭된 부분 중 group번 그룹핑 매칭부분 반환 |
groupCount() | 패턴내 그룹핑한(괄호지정) 전체 갯수 반환 |
정규표현식 문법
^ | 문자열의 시작 |
$ | 문자열의 끝 |
. | 임의의 한 문자 |
* | 문자가 0번 이상 발생 |
+ | 문자가 1번 이상 발생 |
? | 문자가 0번 혹은 1번 발생 |
[ ] | 문자의 집합 범위 [0-9] : 숫자 (0 부터 9) [a-z] : 알파벳 (a 부터 z) 앞에 ^가 나타나면 not |
{ } | 횟수 또는 범위 |
( ) | 괄호 안의 문자를 하나의 문자로 인식 |
| | OR |
\ | 확장 문자의 시작 |
\b | 단어의 경계 |
\B | 단어가 아닌 것의 경계 |
\A | 입력의 시작부분 |
\G | 이전 매치의 끝 |
\z | 입력의 끝 |
\Z | 입력의 끝이지만 종결자 있는 경우 |
\s | 공백문자 |
\S | 공백문자가 아닌 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자가 아닌 문자 |
\d | 숫자. [0-9]와 동일 |
\D | 숫자가 아닌 문자 |
반응형
자주 사용되는 정규표현식
"^[\\w]*$" | 공백 제외 문자열만 허용 |
"^[\\W]*$" | 공백 포함 문자열만 허용 |
"^[\\d]*$" | 숫자만 허용 |
"^[\\D]*$" | 숫자가 아닌 경우 허용 |
"^[\\s]*$" | 공백, 탭을 허용 |
"^[\\S]*$" | 공백, 탭이 아닌 경우 허용 |
"^[a-z|A-Z]*$" | 대소문자 구분없이 영문만 허용 |
"^[a-z]*$" | 소문자 영문만 허용 |
"^[A-Z]*$" | 대문자 영문만 허용 |
"^[ㄱ-ㅎ|가-힣]*$" | 한글만 허용 |
"^[a-z|A-Z|ㄱ-ㅎ|가-힣]*$" | 대소문자 구분없는 영문과 한글만 허용 |
"^[a-z|A-Z|ㄱ-ㅎ|가-힣| ]*$" | 공백 포함 대소문자 구분없는 영문과 한글만 허용 |
"^[0-9a-zA-Zㄱ-ㅎ가-힣]*$"; | 숫자와 대소문자 구분없는 영문과 한글만 허용 |
"^[0-9a-zA-Zㄱ-ㅎ가-힣 ]*$"; | 공백 포함 숫자와 대소문자 구분없는 영문과 한글만 허용 |
"^[a-zA-Z0-9]+@[0-9a-zA-Z]+\\.[a-z]+$" | 이메일 형식 |
"^[0-9a-zA-Z]([-_\\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\\.]?[0-9a-zA-Z])*\\.[a-zA-Z]{2,3}+$" | 이메일 형식에 _(언더바), -(하이픈) 포함 및 길이 형식 |
"^[a-z]{1}[a-z0-9]{5,10}+$" | 아이디 형식에 영문 숫자 조합 길이가 6 ~ 10인 형식 |
"^(?=.*[a-zA-Z])((?=.*\\d)|(?=.*\\W)).{10,128}+$"; | 패스워드 형식에 대소문자, 숫자, 특수문자 조합 길이가 10 ~ 128인 형식 |
"^[\\d]{11}+$"; | 핸드폰 번호 형식 (01012345678) |
"^01([0|1|6|7|8|9])-([0-9]{3,4})-([0-9]{4})+$" | 핸드폰 번호 형식 (010-1234-5678) |
"^[\\d]{2,3}-[\\d]{3,4}-[\\d]{4}+$" | 핸드폰 번호 형식 (010-1234-5678) |
"^\\+82-01([0|1|6|7|8|9])-([\\d]{3,4})-([\\d]{4})+$" | 핸드폰 번호 형식 (+82-010-1234-5678) |
"^\\+82-10-([\\d]{3,4})-([\\d]{4})+$" | 핸드폰 번호 형식 (+82-10-1234-5678) |
"^[\\d]{6}-[1-4][\\d]{6}+$" | 주민등록번호 형식 |
"^[\\d]{3}-[\\d]{2}+$" | 우편번호 형식 |
"^[\\d]{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" | 날짜 형식 (YYYY-MM-DD) |
"^[\\d]{4}]\\/(0[1-9]|1[012])\\/(0[1-9]|[12][0-9]|3[01])$" | 날짜 형식 (YYYY/MM/DD) |
"^[\\d]{4}\\.(0[1-9]|1[012])\\.(0[1-9]|[12][0-9]|3[01])$" | 날짜 형식 (YYYY.MM.DD) |
"^(19|20)[\\d]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" | 날짜 형식에 년도가 19NN ~ 20NN인 형식 |
"([0-2][0-9]{3})\\/([0-1][0-9])\\/([0-3][0-9]) ([0-5][0-9]):([0-5][0-9]):([0-5][0-9])(([\\-\\+]([0-1][0-9])\\:00))?"; | 날짜 형식 YYYY/MM/DD hh:mi:ss |
"^([1-9]|[01][0-9]|2[0-3]):([0-5][0-9])$" | 시간 형식 HH24:mm |
728x90
반응형
'> 개발-IT-인터넷 > > JAVA' 카테고리의 다른 글
[해커랭크(HackerRank) JAVA 풀이] - Valid Username Regular Expression (0) | 2023.09.19 |
---|---|
[해커랭크(HackerRank) JAVA 풀이] - Java Regex 2 - Duplicate Words (0) | 2023.09.19 |
[해커랭크(HackerRank) JAVA 풀이] - Java Regex (0) | 2023.09.18 |
[해커랭크(HackerRank) JAVA 풀이] - Pattern Syntax Checker (0) | 2021.10.01 |
[해커랭크(HackerRank) JAVA 풀이] - Java String Tokens (0) | 2021.10.01 |