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-111
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 |