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
( )  그룹
[ ] 문자셋, 괄호안의 어떤 문자든
[^ ] 부정 문자셋

 

연습 

https://regexr.com/

해당 사이트를 이용해 실시간으로 테스트 가능 및 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

+ Recent posts