Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- createtextnode
- createElement
- htmlFor
- VAR
- FOR
- 학습법 #집중력
- Append
- input
- Let
- appendChild
- const
- boolean
- Openlayers
Archives
- Today
- Total
Atomic Habits
정규식 - 긍정형/부정형 전방/후방 탐색 - 의미와 상세 예시 본문
https://regexr.com/
4. 긍정형/부정형 전방/후방 탐색
* 긍정형은 찾아 달라는 의미이고, 부정형은 찾지 말아달라는 의미이다.
* 전방 : (괄호)를 기준으로 궁극적으로 출력하고자 하는 문자열이 앞에 있다. (?=) , (?!)
* 후방 : (괄호)를 기준으로 궁극적으로 출력하고자 하는 문자열이 뒤에 있다. (?<=) , (?<!)
* 긍정형 전방탐색 - 앞으로 찾기
일치하는 텍스트는 찾되 텍스트 자체는 소비(consume, 출력) 않고, 그 앞에 무엇이 오는지 출력한다.
* 긍정형 후방탐색 - 뒤로 찾기
일치하는 텍스트는 찾되 텍스트 자체는 소비(consume, 출력) 않고, 그 뒤에 무엇이 오는지 출력한다.
* 부정형 전방탐색 - 앞으로 찾기
불일치하는 텍스트 문자열 제외하고(소비하지 않고), 그 앞에 무엇이 오는지 출력한다.
* 부정형 후방탐색 - 뒤로 찾기
불일치하는 텍스트 문자열 제외하고(소비하지 않고), 그 뒤에 무엇이 오는지 출력한다.
부정형 전방 탐색 (?!) vs (?=) 긍정형 전방 탐색
부정형 후방 탐색 (?<!) vs (?<=) 긍정형 후방 탐색
------------------------------------------------
예시
문자열 : /Add_it/applylist?field=&query=¤tPage=2 ->
(?<=\\&).+ ---> query=¤tPage=2
(?<=field=\&).*(?=\&) ---> query=
(?<=field=).*(?=\\&query) ---> ""
문자열 : /Add_it/applylist?field=aa&query=¤tPage=2 ->
(?<=field=).*(?=\\&query) ---> aa
문자열 : /Add_it/applylist?field=aa&query=bb¤tPage=2
(?<=query=).*(?=\\¤tPage) ---> bb
(?<=currentPage=)\\d* ---> 2
------------------------------------------------
* 긍정형 전방/후방 탐색
일치 조건에 포함은 시키되, 최종 결과에는 제외시켜달라는 의미이다.(=소비하지 않는다)
정규표현식 : (긍정형 전방탐색)(기본 정규표현식)
(긍정형 전방탐색) 조건과 (기본 정규표현식) 조건 동시에 만족하는 텍스트를 찾되 (기본 정규표현식) 만 출력한다.
전방 (?<= 표현식)
후방 (?= 표현식 )
(?<= \\<\\w+\\>) .* (?= \\<\\/\\w+\\>)
(?<= \\<([Tt][Ii][Tt][Ll][Ee])\\>) .*? (?= \\<\\/\\1\\>)
<TITLE>SooKkaRak's homepage</TITLE>
* 부정형 전방/후방 탐색
부정형 탐색은 비교적 덜 쓰는 방법이다.
부정형 전방 탐색
정규표현식 : (부정형 전방탐색)(기본 정규표현식)
(부정형 전방탐색) 조건과는 일치하지 않고 (기본 정규표현식) 조건만 일치하는 텍스트를 찾고,
부정형 후방 탐색도 이와 비슷하게, 뒤쪽에서 지정한 패턴과 일치하지 않는 텍스트를 찾는다.
*
부정형 전후방 탐색은 다음과 같이 사용한다.
부정형 전방 탐색 (?!) vs (?=) 긍정형 전방 탐색
부정형 후방 탐색 (?<!) vs (?<=) 긍정형 후방 탐색
즉, 긍정형 전후방 탐색의 = 대신 !를 사용하면 된다.
* 예문
서울 성북군 서성동 1번지
동읍리면 기준 앞 글자 선택 : .*[동,읍,리,면](?<!\\s)
동읍리면 기준 뒷 글자 선택 : (?<=[동]\\s).*
* 예문
다음은 긍정형 후방 탐색과 부정형 후방 탐색 사이에 어던 차이가 있는지 알아보는 예제이다.
예제 본문에 가격과 수량을 나타내는 숫자들이 있다.
우선 간단하게 가격만 얻어보자.
[예문]
I paid $30 for 100 apples, 50 oranges, and 60 pears.
I saved $5 on this order.
[긍정형 후방탐색] (?<=\\$) \\d+
[결과]
30
5
이번에는 가격이 아니라, 수량을 찾아보자.
[부정형 후방탐색] (?<!\\$) \\d+
[결과]
0 100 500 60
$30의 0 역시 $ 다음 위치가 아니기에 덩달아 같이 결과에 포함되어 버렸다.
이럴 땐 깔끔하게 단어 경계를 붙여 문제를 해결하면 되겠다.
\\b : 앞 혹은 뒤에 문자, 숫자, 특수문자 등이 오지 않고 다른 단어와 경계가 있어야 한다는 조건이다.
[부정형 후방탐색 + 단어 경계조건] \\b (?<!\\$) \\d+ \\b
[결과]
100 500 60
좋아요공감
공유하기
통계
글 요소
'IT > Regular Expressions' 카테고리의 다른 글
\b vs \B (0) | 2022.06.17 |
---|---|
vim 정규식(전방탐색 후방탐색) (0) | 2022.05.27 |
[정규식] 조건문 (0) | 2021.12.05 |
[정규식] 옵션 정리(광범위) (0) | 2021.12.05 |
[정규식] 그룹(group) 재참조 (0) | 2021.12.05 |
Comments