일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- docker #docker tutorial
- 분석 작업
- 감사
- jv
- Lambda
- #화면캡쳐 #macOS
- bootstrap
- 2010
- 평가인증
- #정규표현식
- #Microservice
- 방법론
- #단축키
- Microservices
- java
- Spring Boot
- 년말
- 토익
- WebJar
- 프로젝트 시작
- #Gradle Multi project with IntelliJ
- Today
- Total
사랑해 마니마니
정규표현식(작성 중) 본문
Search
- 문자열에서 문자를 찾을 때는 매칭되는 전체 문자를 찾는다. 예를 들어 Hello, World! Hello, Home 에서 Hello로 검색하면 2개의 Hello가 검색된다
- Case sensitive라서 대소문자를 가린다.
Anchor(위치), escaping
정규 표현식은 대소문자를 가림
^
: 라인의 시작. ^who는 문자열의 맨처음에 나타나는 who를 찾음.
- who is who에서 ^로 검색하면 처음 who만 검색됨
$
: 라인의 끝. who$는 문장의 맨 끝에 나타나는 who를 찾음.
- who is who에서 who$로 검색하면 마지막 who만 검색됨
\
: escape. 만약 문자열에 $이나 ^ 또는 \가 있는 경우 이 문자를 찾고자 할 때는 \$
, \^
, \\
를 입력해야 함.
- $12$ \-\ $12$에서 맨 처음 나오는 $를 검색하려면 ^$가 아니라 ^\$로 검색해야함
- 제일 뒷쪽의 $를 검색하려면 \$$로 검색
모든 문자
.
: 문자 하나. 동작하는 방식이 특이한 데 .
는 문자 한개 단위로 전체 문자열을 검색하여 문자열 전체가 검색됨.
- 그런데
...
는 문자 3개 단위로 검색함. 그래서 문자가 7개로 이루어진 문자열의 경우 문자 3개 단위로 검색하여 앞에 6개만 선택됨(마지막 1개 문자는 3개 문자 단위로 검색하기 때문에 갯수에서 제외됨) - '.' 으로 검색하려면 escape시켜야 함. OK. There is에서 '.' 을 검색하려면
\.
으로 검색
특정 문자 리스트
[...]
: square brackets, [ ]는 문자 하나를 나타내며, 여러 개의 문자를 넣을 경우 'or'의 의미.
- 그래서
[dH]
는 'd' or 'H' 한개의 문자를 나타냄
[-]
: '-'는 range(A부터 B까지)를 나타냄.
[2-6]
은[23456]
과 같은 의미- 대소문자 전체는
[a-zA-Z]
로도 나타낼 수 있음
[^]
: [ ]
내에서 ^
는 not의 의미. ([^ ... ])
[^357]
은not (3,5,7)
을 의미함. bracket([...]) 내에서 쓰이는 경우가 아닌 경우 Anchor(위치)지정 자로서 문자열의 처음을 나타냄
Subpattern
( | )
: ( )
는 그룹 내에 있는 항목을 검색하며 OR를 의미하는 |
와 같이 쓰임. 그래서 (hi|there)
는 'hi' or 'there'을 의미함
Quantifiers (수량)
{n}, {n,}, {n,m}
: { } 는 앞에 있는 패턴이 몇번 나타나는지를 나타내며 {n}은 n번, {n,}는 n번 이상, {n,m}은 n번 부터 m까지를 나타낸다. a{3}은 aaa와 같은 의미
*
: 앞의 패턴이 0 ~ n번 나타난다. a*는 a가 0 ~ n번 나타난다. {0,}
도 같은 의미
+
: 앞의 패턴이 1 ~ n번 나타난다(최소 1번 이상). {1,}
도 같은 의미
?
: 앞의 패턴이 0 ~ 1번 나타난다. a?b
는 aabc에서는 ab, abc에서는 ab, bc에서는 b를 선택할 수 있는 표현식. {0,1}
도 같은 의미
- 그런데 이 수량 연산자들은 탐욕적(greedy)하게 찾는 데 최대한 매칭되는 값을 찾는다.
- 예를 들어
<div>hi</div><div>there</div>
에서 - <div>.<div>를 찾는다면 .이 모든 문자열을 찾기 때문에 <div>hi</div><div>there</div>이 검색됨
-
- - ?가 수량자 뒤에 나오는 경우 : r.*? 는 앞 수량자 *의 가장 작은 값(그래서 0). r.+?는 1개. r.??는 ?의 최소값 0
[참조] greedy를 lazy qunitifier로 만들 때 사용함. <div>hi</div><div>there</div>
에서 <div>.+</div>
를 사용하면 전체가 선택됨(greedy). <div>.+?</div>
를 사용하면 앞쪽만 선택됨(lazy)
- http://gskinner.com/RegExr/ 에서 한번 해보자
{}
: 수량을 좀더 정교하게 하게 지정하기 위함. 앞의 패턴이 몇번 반복될 수 있는가 {n}, {min, max}로 쓸수 있음. 예를 들어 [els]{1,3}
은 'e' or 'l' or 's'가 1 ~ 3번 나타날 수 있음. {3,}
는 3이상
Character class(문자 그룹)
\w
: word(문자, 숫자, _)를 나타냄(alphabet, number, underline(_)). white space는 제외됨 [A-z0-9_]
와 같은 의미
\W
: not \n
(word가 아니다)
\d
: 숫자(digit [0-9])
\D
: not \d
(digit이 아니다)
\b
: word boundary \b\w
는 단어의 첫번째 글자. 'word'에서 'w'가 선택됨. \w\b
는 마지막 글자. word전체를 선택하려면 \b\w+\b
. \b\w\b
는 한 단어 글자
\B
: \B
.을 사용하면 'cat concat'에서 'at'가 선택됨. (word boundary에서 첫번째 글자가 아닌 것)
\A
: 문장 전체의 처음(cf. ^
은 multi line의 경우 매 라인의 시작점을 의미)
\Z
: 문장 전체의 맨 마지막(cf. $
는 muli line의 경우 매 라인의 마지막을 의미)
egular Expression | Description |
---|---|
|
Any digit, short for |
|
A non-digit, short for |
|
A whitespace character, short for |
|
A non-whitespace character, short for |
|
A word character, short for |
|
A non-word character |
|
Several non-whitespace characters |
|
Matches a word boundary where a word character is |
Assertions
(?=X)
: X를 기준으로 선택하는 데 X는 제외함. \w+(?=X)는 AAAX에서 AAA만 선택하고 X는 제외함
'java' 카테고리의 다른 글
Java 정규 표현식 (0) | 2019.05.01 |
---|---|
Comparator (0) | 2018.01.29 |
java array를 list로, list를 array로 바꾸기 (1) | 2018.01.29 |
Java Lambda 식에서 자주 사용하는 스트림 명령들(1) (0) | 2018.01.09 |