SMALL
정규표현식(Regular Expression)
정규표현식(Regular Expression)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.
정규 표현식은 이메일, 전화번호 등 사용자가 입력한 값을 검증할 때 사용된다. (유효성 검사)
정규 표현식 문법
Character
Character | explain |
\ | 특수 문자가 아닌 문자 |
. | 어떤 문자 1개를 의미 |
\d | digit 숫자 |
\D | digit 숫자 아님 |
\w | [a-zA-Z_]와 동일 ( 모든 알파벳 + _ ) |
\W | [^a-zA-Z_]와 동일 |
\s | space 공백 |
\S | space 공백 아님 |
Quantifiers
Character | explain |
? | 1 or 0 |
* | 0번 이상 |
+ | 1번 이상 |
{n} | n번 반복 |
{min,} | min이상 반복 |
{min,max} | min이상 max이하 반복 |
Boundary-Type
Character | explain | example |
\b | 단어 경계(boundary) | \btest\b : test tests test |
\B | 단어 경계 아님 | \Btest\B : test Gtests tests |
^ | 문장의 시작 | ^test : tests aaa test |
$ | 문장의 끝 |
Groups and Ranges
Character | explain |
| | or |
( ) | 그룹 |
[ ] | 문자셋, 괄호안의 어떤 문자든 |
[^ ] | 부정 문자셋 |
연습
해당 사이트를 이용해 실시간으로 테스트 가능 및 reference 정보 제공
public class TestAA {
public static void main(String[] args) {
String result;
result = "The cat sat on the mat. and the cat".replaceAll("^sat", "*");
System.out.println(result);
String pattern1 = "[abc][vz]";
assertTrue("av".matches(pattern1));
assertFalse("ac".matches(pattern1));
}
}
Test용 클래스를 작성하여 java application을 실행하며 결괏값 확인
자주 사용되는 정규 표현식
이메일
\w+@\w+\.\w+(\.\w+)?
해당 정규식을 분해해서 보면
\w+ | _를 포함한 알파벳 한개 이상 |
@ | @ |
\w+ | _를 포함한 알파벳 한개 이상 |
\. | 정규 표현식에 .이 존재하므로 해당 내용이 아닌 문자.을 나타내기위해서 \.으로 표현 |
\w+ | _를 포함한 알파벳 한개 이상 |
(\.\w+)? | .co.kr과 같이 .kr이 존재하는 경우를 커버 ?을 이용해 0 or 1개 존재 |
^.*$ ( 모든 문자 선택)
^ | 문장의 시작 |
.* | 모든 문자 0개 이상 |
$ | 문장의 끝 |
특수 Case
*? or +?
?는 수량자의 역할을 한다고 소개하였다. ( 0 or 1)
하지만 + or *과 같이 사용되면 다른 용도로 사용이 된다. (*? or +? )
lazy로 표현되며 처음에 발견했을 때 쉬고 다시 찾는다.
Hi, Ut, Et, At, Tt.
,.*, 와 같은 정규 표현식을 찾는다고 해보자
결과는 위와 같다.
이 상황에서 *뒤에 ?를 추가한다면 -> *?
결과는 이렇게 달라진다.
(?:)
다음으로 Grouping 관련 ? 의 예시이다.
(?:)와 같이 사용되는 경우에는 정규표현식을 통해 찾지만 기억하지는 않음을 나타낸다.
위와 같이 ()를 통해 그룹핑한 정보를 가지고 있다.
?:를 추가하면 group정보가 나타나지 않는다.
java code를 예시로 보면
?: 를 사용하지 않은 경우에는 group으로 지정한 정보를 mather.group(index)를 통해서 조회 가능하다.
?:를 사용하게 되면 group정보가 저장되지 않아 해당 정보를 가져올수없게 된다.
LIST
'Development' 카테고리의 다른 글
[SSL] SSL, Keystore 이해해보기 (0) | 2021.06.10 |
---|---|
[JPA] Entity, Dto 분리 ( DB, View Layer ) (0) | 2021.04.16 |
[Persistence] ORM, SQL Mapper에 대해서 ( 차이점 ) (0) | 2021.04.04 |
[JPA] JPA, ORM이란 ( JPA, ORM의 관계 ) (0) | 2021.04.01 |
[Hateoas] Hateoas(헤이티오스) 란 ( + REST API란 ) (0) | 2021.03.03 |