안녕하세요. 제임스 입니다. 


이번 포스팅 부터는 정규식에 대해 정리 하고자 합니다.


정규표현식(Regular Expression)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어 입니다. Pattern Matching 이라고도 부릅니다.


이 정규식을 사용하는 방법에 대해 알아보겠습니다. 


표현식 상세
^ 문자열의 시작을 의미
$ 문자열의 종료를 의미
. 줄바꿈을 제외한 임의의 문자를 의미. 줄바꿈을 위한 m 옵션은 허용
[...] [] 사이에 있는 임의의 문자 또는 문자집합. 문자의 집합은 시작 문자와 종료 문자 사이에 - 기호로 범위를 지정
[^...] [] 사이에 있는 임의의 문자 또는 문자집합을 제외
{} 회수 또는 범위를 의미
() 소괄호 안의 문자를 하나의 문자로 인식
\A 전체 문자의 시작
\z 전체 문자의 종료
\Z 허용되는 최종 라인 종결자를 제외한 전체 문자열의
re* 앞의 표현식이 0 이상 일치
re+ 앞의 표현식이 1 이상 일치
re? 앞의 표현식이 0 또는 1 일치
re{ n} 앞의 표현식이 정확히 n 일치
re{ n,} 앞의 표현식이 n 또는 이상 일치
re{ n, m} 앞의 표현식이 최소 n 최대 m 일치 
a| b a 또는 b 일치
(?i) (?i) 뒤에 옵션을 추가 대소문자 구분하지 않음
(re) 정규식을 그룹화하고 일치된 텍스트를 기억
(?: re) 정규식을 그룹화하고 일치하지 않는 텍스트를 기억
(?> re) 역추적 없이 독립적 패턴과 일치
\w 단어 문자와 일치
\W 단어 문자와 일치
\s 공백문자와 일치. [\t \n \r \f] 동일
\S 공백문자와 일치
\d 숫자와 일치. [0-9] 동일
\D 숫자가 아닌 모든 문자와 일치
\A 문자열의 시작과 일치
\Z 문자열의 종료와 일치. 만약 줄바꿈이 있다면 줄바꿈 이전 문자열과 일치
\z 문자열의 종료와 일치
\G 마지막 일치 위치가 끝난 지점과 일치
\n 캡처 그룹 번호 n 대한 참조
\b 대괄호 밖에 있을때 단어 경계와 일치. 대괄호 안에 있을때는 백스페이스 (0x08) 일치
\B 단어 경계와 일치
\n 줄바꿈과 일치
\t 탭과 일치
\Q, \E \Q \E 사이의 문자와 일치


정규표현식의 기본 패턴 들입니다. 

위 값들의 조합을 통해 원하는 표현식을 만들 수 있습니다. 




정규표현식은 아래와 같이 String 함수들과 함께 사용할 수 있습니다. 


s.matches("regular expression") 

s.split("regular expression")

s.replaceAll("regular expression")


이외에도 다른 String 함수들과 함께 사용 할 수 있습니다. 


1
2
3
4
5
6
7
8
String regExp = "^[a-zA-Z]*$";
        
String testStr1 = "TestCodeHere";
if(testStr1.matches(regExp)){
    System.out.println("testStr1 은 정규표현식에 맞는 문자열");
}else {
    System.out.println("testStr1 은 정규표현식에 맞지 않는 문자열");
}
cs


regExp 라는 변수에 "^[a-zA-Z]*&" 라는 표현식을 작성 했습니다. 

이 표현식은 우리가 일상 코딩중 가장 많이 사용하는 표현식으로 영문대소문자만 허용한다는 표현식입니다. 


String 함수중 matches 함수를 이용하여 testStr1 값이 regExp 표현식에 맞는지 비교 하는 코드 입니다. 

testStr1 값중 영문 대소문자 외에 어떤 텍스트도 보이지 않습니다. 결과 값은 예상 가능하죠? ^^


testStr1 은 정규표현식에 맞는 문자열




1
2
3
4
5
6
String testStr2 = "TestCodeHere.";
if(testStr2.matches(regExp)){
    System.out.println("testStr2 은 정규표현식에 맞는 문자열");
}else {
    System.out.println("testStr2 은 정규표현식에 맞지 않는 문자열");
}
cs


이번에는 동일한 표현식에 testStr2 값이 부합하는지 확인 해보겠습니다. 

testStr2 는 testStr1 값에 마침표( . )을 하나 추가 했습니다. 

정규 표현식 상에서는 영문대소문자만 허용하는 것으로 작성 했습니다. 

결과는 당연히 표현식에 맞지 않는 문자열이라는 값을 리턴해야 정상입니다. 


testStr2 은 정규표현식에 맞지 않는 문자열



1
2
3
4
5
6
String testStr3 = "Im James";
if(testStr3.matches(regExp)){
    System.out.println("testStr3 은 정규표현식에 맞는 문자열");
}else {
    System.out.println("testStr3 은 정규표현식에 맞지 않는 문자열");
}
cs


이번에는 문자열에 스페이스가 있습니다. 

두번째 예제를 이해 하셨다면 쉽겠죠? 당연히 정규표현식에 맞지 않는 문자열입니다. 


testStr3 은 정규표현식에 맞지 않는 문자열



이번 포스팅에서는 정규표현식의 기본을 간단히 정리 했습니다. 

앞으로 많이 사용하는 패턴들과 특수한 케이스에 대해 정리해 보겠습니다. 



아래 링크는 정규표현식을 테스트 해볼 수 있는 사이트 입니다. 

잘 이용하시길 바랍니다.


https://regexr.com/



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D




블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,