정규식 : 검색 + 치환
정리
|
|
|
||
2장 문자 하나 찾기 |
. |
모든 문자 1개 |
\r이나 \n은 해당사항 없음 |
|
|
\. |
마침표(.) |
역슬래시 |
|
3장 문자 집합으로 찾기 |
[] |
문자집합(집합내에 1개만 사용됨) |
|
|
|
[a-z] |
a부터z까지 범위 정할때 하이픈 사용 |
하이픈(-)은 대괄호[]내에서만 메타문자이다.대괄호 밖에서는 그냥 문자임. |
|
|
[0-9] |
[0123456789] |
|
|
|
[^0-9] |
집합을 제외하고 찾기 |
대괄호[] 안에서 효과 |
|
4장 메타 문자 |
\ |
이스케이프 |
|
|
|
\\ |
문자(\)를 표시 |
|
|
공백메타문자 | [\b] | 역스페이스 | ||
| \f | 페이지넘김(form feed) | ||
| \n | 줄바꿈 | ||
| \r | 캐리지 리턴 | ||
| \t | 탭 | ||
| \v | 수직 탭 | ||
| 숫자 | \d | 숫자 하나 [0-9] | |
| \D | 숫자 제외한 문자 하나 [^0-9], 당연히 \r\n같은 것은 제외 | ||
| 문자 | \w | [a-zA-Z0-9_] 밑줄과 영숫자 | |
| \W | [^a-zA-Z0-9_] | 한글, 공백, ., ;, (, ), -, 등등등 생각외로 굉장히 많다. \r\n 도 포함 | |
| 공백 | \s | [\f\n\r\t\v] 모든 공백 문자와 같다.([\b]는 포함 하지 않음) |
|
| \S | [^\f\n\r\t\v] | ||
| 16진수 | \x0A | 16진수 (아스키문자 10 = \n) | |
| 8진수 | \011 | 8진수 (아스키문자 9 = \t) | |
| \c | 컨트롤키 문자(쓸일이 거의 없다) \cZ = Ctrl+Z | ||
5장 반복 찾기 | 탐욕적 수량자 | + | 1개 이상 | {1, } |
| [\w.]+ | [a-zA-Z0-9_.] 마침표와 밑줄을 포함한 영숫자 1개 이상 | ||
| * | 0개 또는 1개 이상 | 이론상 {0, } 와 같지만 실제로 {0, } 로 찾아지지는 않는다. | |
| ? | 0개 또는 1개 | 이론상 {0, 1} 와 같지만 실제로 {0, 1} 로 찾아지지는 않는다. 왜그러지??? | |
| http[s]?:// | https:// 또는 http:// | ||
| 구간 | {6} | 문자 6개 | |
| \d{6} | \d\d\d\d\d\d | ||
| \d{1,2} | \d 또는 \d\d | ||
|
| \d{3, } | \d\d\d 또는 \d\d\d\d\d\d.....등등등 최소 3개 | |
| 게으른 수량자 | +? | 최소한 일치하는 경우 | |
| *? | 최소한 일치하는 경우 | 이메일 주소를 찾을때 .*@ 는 탐욕적이다 .*?@를 사용해야 한다. | |
| {n, } | 최소한 일치하는 경우 | ||
6장 위치 찾기 | 경계 | \b | \w과 \W(\w외 모든 문자) 사이에 있는 위치 | |
\B | \w과 \w 또는 \W과 \W 사이에 있는 위치 | |||
\babc\b | Enter abc words (주로 공백사이의 단어) "abc" 'abc' -abc- .abc. (abc) +abc+ <abc> [abc] *abc* #abc# !abc! | abc가 \w이므로 반대인 \W로 둘러쌓은 경우를 찾는다. | ||
\b-\b | end-start | -가 \W이므로 반대인 \w로 둘러쌓인 경우를 찾는다. | ||
\Babc\B | kkkabckkk _abc_ | abc가 \w이므로 같은 \w로 둘러쌓은 경우를 찾는다. | ||
\B-\B | end - start | -가 \W이므로 같은\W으로 둘러쌓인 경우를 찾는다 | ||
문자열시작 | ^ | ^\s*<\?xml.*\?> | \A도 같은 기능(이클립스는 동작하지 않음) | |
문자열끝 | $ | </[Hh][Tt][Mm][Ll]>\s*$ | \Z도 같은 기능(이클립스는 동작하지 않음) | |
다중행 | (?m) | (?m)^\s*//.*$ (?m)은 항상 패턴 앞에 두어야 한다. (?m)다중행모드로 변경하면, 정규 표현식 엔진이 줄바꿈문자를 문자열 구분자로 인식한다. 캐럿(^), 달러($) 기호의 동작을 변경한다. | (?m)을 지원하지 않는 정규식도 많다. | |
7장 하위 표현식 사용 | ( ) | 를 찾고자 할때 ( ){2, } | IP 1.255.255.255인 경우 이지만 (\d{1,3}\.){3}\d{1,3} 으로 할 수도 있다.(완벽하진 않음) > 성능문제가 발생할 수도 있다. | |
| | OR : 왼쪽 혹은 오른쪽 | 1967-08-17에서 1967을 찾기 위해 19|20\d{2} 로 찾으면 19만 찾고 (19|20)\d{2} 로 찾아야 1967 모두 찾을 수 있다. | ||
8장 역참조 사용하기 | \1 | 반복되는 단어 찾기 of of, and and , , are are.... | 역참조는 참조하는 표현식이 하위 표현식일때, 그리고 하위 표현식을 괄호( )로 감쌌을때 만 동작한다. | |
( ) 로 감싼 부분만 \1로 가져올 수 있다. \1 : 첫번째, \2 : 두번째, \3 \4 \5... \0은 표현식 전체.. | ||||
짝이 맞는 <h1>, <h2> 태그 찾기 <[hH]([1-6])>.*?</[hH]\1> | ||||
치환 | $1 | 이메일주소에 하이퍼링크 걸기 1.이메일주소 찾기 : (\w+[\w\.]*@[\w\.]+\.\w+) 2.치환 : <a href="mailto:$1">$1</a> | ||
치환할때 대소문자 변환 | \l | 다음에 오는 글자를 소문자로 변환 | 이클립스에서는 작동 안함. | |
\u | 다음에 오는 글자를 대문자로 변환 | 이클립스에서는 작동 안함. | ||
\L | \E를 만날때까지 모든 문자를 소문자로 변환 | 이클립스에서는 작동 안함. | ||
\U | \E를 만날때까지 모든 문자를 대문자로 변환 | 이클립스에서는 작동 안함. | ||
\E | \L, \U변환의 끝을 나타냄. | 이클립스에서는 작동 안함. | ||
<h1>abc</h1> h1태그 사이의 문자를 대문자로 변경하기 찾기 : (<[Hh]1>)(.*?)(</[Hh]1>) 치환 : $1\U$2$3 | 이클립스에서는 작동 안함. | |||
9장 전방탐색과 후방탐색 | <title>ABC</title> 에서 ABC만 추출하고 싶다면? | |||
전방탐색 -> | ?= | 전방탐색은 일치 영역을 발견해도 그 값을 반환하지 않는 패턴 | ||
.+(?=:) https:// 에서 http, https 만 가져온다. (:)를 제외한다. | ||||
후방탐색 <- | ?<= | (?<=\$)[0-9.]+ 1: $23.45 2: $5.31 에서 다음 추출 23.45 5.32 | ||
전방후방 함께 | (?<=<[tT][iI][tT][lL][eE]>).*(?=</[tT][iI][tT][lL][eE]>) <Title>이부분찾아줌</Title> | |||
부정형 전후방 | ||||
부정 전방 | ?! | \b(?<!\$)\d+\b 달러가 없는 숫자 단어 | ||
부정 후방 | ?<! | |||
10장 조건달기 | 역참조 ?(1)true | (<[aA]\s+[^>]+>\s*)? <[iI][mM][gG]\s+[^>]+> (?(1)\s*</[aA]>) <a href=""><img src=""></a> 또는 <img src=""> 를 찾아줌 | ||
역참조 ?(1)true|false | (\()?\d{3} (?(1)\)|-) \d{3}-\d{4} 123-456-7890 (123)456-7890 | \( 가 있으면 )를 붙이고, 없으면 -를 붙인다. | ||
전후방탐색 ?(?=검색어)true | \d{5}(?(?=-)-\d{4}) | 왼쪽에서부터 \d{5} 를 찾고 전방탐색 (?=-) 를 만족하면 - 를 제외하고 계속 진행 -\d{4} 를 찾음 | ||
정규식을 그래프로 보기(https://regexper.com/)
IP 정규식으로
출처 : http://www.moneybook.co.kr/pages/543430
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
풀어서 나타내면,,,
^
(
(
[0-9] | [1-9][0-9] | 1[0-9]{2} | 2[0-4][0-9] | 25[0-5]
)
\.
){3}
(
[0-9] | [1-9][0-9] | 1[0-9]{2} | 2[0-4][0-9] | 25[0-5]
)
$