본문 바로가기
java

정규표현식

by 신방동불주먹 2023. 2. 26.

1. 의미

  • 정규표현식(Regular Expression)은 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단

2. 특징

1) 대소문자를 구분함
2) 띄어쓰기 수를 구분함

3. 패턴

1) 기본패턴

패턴설명예시예시설명

 

^(캐럿) 시작하는 문자열 찾음 ^W 'W'로 시작하는 문자열 찾기
$(달러) 끝나는 문자열 찾음 W$ 'W'로 끝나는 문자열 찾기
.(애니) 문자 or 숫자 or 공백 하나 ... 문자열 길이가 3글자 이상인 것을 찾기
[](브라켓) []안에 있는 문자열 찾음 [dH]. 'd+문자(.)' or 'H+문자(.)' 문자열 찾기
-(레인지) 해당하는 범위의 문자열 찾음 A-C 'A'부터 'C'까지
[^문자](부정) 괄호 안에 문자를 포함하지 않는 문자열 찾음 [^ABC] 'A' or 'B' or 'C'를 제외한 문자열 찾기

2) 서브패턴

 

(|)(or) 또는 (on|yes|day) 'on' or 'yes' or 'day' 문자열 찾기

 

3) 수량자(Quantifiers)

  • 수량자(Quantifiers): 어떠한 패턴이 얼만큼 등장하는지

수량자설명

* 0개 이상 나타나는 문자 a*b 'a'가 앞에 있을수도있고 여러개 있을수도 있고 'b'도 뒤에 있을수도 있고 여러개 있을 수도 있음 'aab', 'ab', 'b'모두 가능
+ 1이상 나타나는 문자 a+b 'a'가 한개이상, 'b'도 한개 이상 있어야 함
? 없거나 1개인 경우 a?b 'a'가 없거나 한개, 'b'가 없거나 한개
{m,n} m회 이상 n회 이하 나타나는 문자 [els]{1,3} 'e' or 'l' or 's'가 1개 이상 3개 이하
       

4) 패턴의 활용

패턴설명

r.*? *뒤에 '?' 오면(수량자 뒤에 ?가 오면) *수량자의 가장 최소단위인 '0'을 뜻함 즉, r뒤에 '.'은 0이라는 뜻이라서 오직 'r'만 나타냄
r.+? '+' 수량자의 가장 최소 단위인 1을 나타냄 즉, 'r'과 'r' 다음 나오는 문자 하나
r.?? '?'의 최소단위인 0을 나타내면서 오직 'r'만 나타냄

 

5) 탐욕적인 수량자(Greedy Quantifiers), 게으른 수량자(Lazy Quantifiers)

(1) 탐욕적인 수량자(Greedy Quantifiers)

  • 수량자 선택: <div>.+</div>
  • 대상: <div>test</div><div>test2</div>
  • 이중 'test'와 'test2'를 따로 선택하고 싶어도 위와 같이 수량자를 선택하면 <div>test</div><div>test2</div> 전체가 한개로 선택 됨 = Greedy Quantifiers

(2) 게으른 수량자(Lazy Quantifiers)
위의 예에서 수량자 선택을 <div>.+?</div> 이렇게 하게되면 만족하는 부분만 선택하게 됨(만족하는 부분이 여러개라면 여러개 선택 됨)-> 탐욕적인 수량자는 처음 만족하는 부분부터 마지막 만족하는 부분까지 모두 선택

6) 경계

  • []로 범위를 지정하는 것보다 간편한 방법

패턴설명예시예시설명

\w 'w' = 문자,숫자, _ 의미    
\w* 0이상의 문자, 숫자, _ 의미    
\W 문자,숫자, _ 를 제외한 것 의미(w의 반대)    
\d 숫자의미    
\D 숫자를 제외한 모든 것    

7) Assertions

(?!패턴)  :   뒤에 패턴 존재하면 무시, 존재 안 하면 매칭.뒤에 해당 패턴이 없어야 매칭.

예)AAAX---AAAcase1) 뒤에 대문자 x 가 없는 AAA정규 표현식 : AAA(?!X)AAAX---AAA

 

case2)대문자 AAA에 해당하는건 전부정규표현식 : AAAAAAX---AAA

 

\w+(?=X) '?='은 뒤에오는 문자로 검색해서 (x)문자를 찾지만 선택에서는 제외하라는 뜻

aaax의 x는 소문자이기 때문에 선택되지 않음

\w+(?=\w) 인 경우 AAAX-aaax-11

 

4. 이스케이프(Escape)

  • Escape: 정규표현식 패턴이 아닌 문자로 사용하고 싶을때는 앞에 \(역슬래시)를 앞에 붙이기

 

 

 

 

* OR 연산

    - abc 와 def 중 적어도 하나를 포함

abc|def 

(abc|def) 괄호를 써도 동일



* AND 연산

    - abc 와 def 를 모두 포함

(?=.*abc)(?=.*def)

 

    //----------------------

    - 줄 전체를 선택시 끝에  .*  추가

.*(abc|def).*     <== 괄호사용, 앞뒤로 .*  추가

(?=.*abc)(?=.*def).*   <== 끝에만 추가도 됨

 

'java' 카테고리의 다른 글

parseInt() / intValue()  (0) 2023.06.01
List to Array  (0) 2023.05.26
Collection(Set)  (0) 2022.10.12
Properties  (0) 2022.10.12
Collection(Map)  (0) 2022.10.12