티스토리 뷰

Programming/Others

정규식

Albothyl 2017. 5. 16. 09:30

연습 사이트 : http://regexr.com

참고 사이트 : https://blog.outsider.ne.kr/360 

1. \b 

- sql의 like검색조건에 들어가는 "%"와 같다.


원본 텍스트

car Car CaR CAR caR scar carry incarcerate


정규식

\b [Cc][Aa][Rr]  (대소문자 상관없이 car로 시작하는것)


결과

car Car CaR CAR caR carry


정규식

\b [Cc][Aa][Rr] \b (대소문자 상관없이 car)


결과

car Car CaR CAR caR

2. . (점, 마침표)

- * 와 같은 의미, 아무거나 와도 상관없다는 의미. 점이 1개면 1개의 문자가 아무거나 와도 상관없고, 2개면 2개의 문자가 와도 상관없음

- 진짜 마침표 "." 을 찾으려면 앞에 이스케이프 문자인 역슬레쉬를 붙여야 한다. \.


원본 텍스트

car Car CaR CAR caR scar carry incarcerate


정규식

\bca.   (ca로 시작하고 뒤에 1자리는 아무거나 상관 없음)


결과

car caR carry


원본 텍스트

sales1.xls order3.xls sales2.xls na1.xls sa2.xls


정규식

.a.\.xls


결과 

na1.xls sa2.xls

3. [] 

- 문자 집합으로 [ns] 면 n이나 s중 일치하는것을 or 조건으로 찾는다.


원본 텍스트

sales1.xls order3.xls sales2.xls na1.xls sa2.xls


정규식

[ns]a.\.xls


결과 

na1.xls sa2.xls


정규식

[ns]a[0-9]\.xls  // "-"하이픈은 대괄호[] 안에서만 범위를 나타내는 특수문자이고, 대괄호[] 밖에서는 그냥 문자 "-"하이픈이다.


결과 

na1.xls sa2.xls



원본 텍스트

The phrase "regular expression" is often abbreviated as RegEx or regex.


정규식

[Rr]eg[Ee]x


결과 

RegEx regex

4. ^   (^ 은 다른 메타문자와 사용되면 의미가 틀려진다.) 

a. 범위를 나타내는 [](대괄호) 안에 사용되면 특정 조건을 제외하고 찾는다는 의미가 된다.


a. 원본 텍스트

sales1.xls order3.xls sales2.xls na1.xls sa2.xls sam.xls sa.xls


a. 정규식

[ns]a[^0-9]\.xls


a. 결과 

sam.xls


--------------------------------------------------------


b. 단독으로 사용되면 특정 문자열로 시작하는 단어를 찾는다.


b. 원본 텍스트

<?xml version="1.0" endocing="UTF-8" ?>

testdata


b. 정규식

^<\?xml.*\?>


b. 결과

<?xml version="1.0" endocing="UTF-8" ?>

5. \d

- 숫자 하나 [0-9] 와 같다.

6. \D

- 숫자를 제외한 문자 하나 [^0-9] 와 같다.

7. \w  (소문자  w)

- 대소문자와 밑줄을 포함하는 모든 영숫자로 [a-zA-Z0-9_] 와 같다.

8. \W  (대문자 W)

- 영숫자나 밑줄이 아닌 모든 문자로 [^a-zA-Z0-9_] 와 같다.

9. \s  (소문자 s)

- 모든 공백문자로 [\f\n\r\t\v] 와 같다.

10. \S  (대문자 S)

- 공백 문자가 아닌 모든 문자로 [^\f\n\r\t\v] 와 같다.

11. +

- 1개 이상을 찾을때에는 + 를 붙여준다.


원본 텍스트

Send personal email to Ben@forta.com. For questions

abuout a book use suppert@forta.com. Feel free to send

nice if it were that simple, hut?


정규식

\w+[\w.]*@[\w]+\.\w+


결과 

Ben@forta.com suppert@forta.com

12. ?

- 없거나 1개인 문자 차지


원본 텍스트

The URL is http://www.forta.com/, to connect

securely use https://www.forta.com/ instead.


정규식

https?://[\w./]+

13. {자리수} 

- 자리수 지정으로 \w{3} 이면 \w을 3번 반복함


원본 텍스트

The URL is http://www.forta.comaaaa/, to connect

securely use https://www.forta.com/ instead.


정규식

https?:\/\/[\w./]+\.[\w.]{3}


결과

http://www.forta.com

https://www.forta.com


- 지정한 횟수만큼 특정 문자열이 반복되는걸 찾을때

원본 텍스트

Hello, my name is Ben&nbsp;Forta, and I am the author of books on SQL, ColdFusion, WAP, Windows&nbsp;&nbsp;2000, and other subjects.


정규식

(&nbsp;){2}


결과

&nbsp;&nbsp;

14. {자리수, 자리수}

- 특정 범위, 다시 말해 일치시키려는 요소 수의 최솟값과 최댓값을 나타냄


원본 텍스트

4/8/03

10-6-2004

2/2/2

01-01-01

01,01,01


정규식

\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4}


결과

4/8/03

10-6-2004

01-01-01


- 반복되는 숫자가 많을 경우 아래와 같이 응용할 수 있다.

원본 텍스트


정규식


결과

15. {최솟값, } 

- 최소값 ~ 많이~ 로 + 와 동일한 기능


원본 텍스트

4/8/03

10-6-2004

2/2/2

01-01-01

01,01,01


정규식 

\d{2,}[-\/]\d{1,2}[-\/]\d{2,4}


결과

10-6-2004

01-01-01

16. +?   +?   {n,}?  (lazy 수량자)

- 문자가 최소로 일치하는 부분까지만 찾는다.


원본 텍스트

This offer is not available to customers

living in <B>AK</B> and <B>HI</B>.

living in <B>AK<B> and <B>HI</B>.

living in <B>AK<B> <B></B>and <B>HI</B>.


정규식

<[Bb]>.*?<\/[Bb]>


결과


아래는 lazy가 아닐경우 비교하기 위해서 첨부함


17. 글자수가 특정 갯수인 단어 찾기

원본 텍스트

This offer is not available to customers

living in <B>AK</B> and <B>HI</B>.


정규식

\b\w{3}\b


결과

not

and


18. ?=기준문자  아니면 (기준문자)  (전방 탐색, 즉 기준문자 왼쪽으로 찾기)

원본 문자열

http://www.forta.com/

https://www.mail.forta.com/

ftp://ftp.forta.com/


정규식

.+(?=:)


결과

http

https

ftp


정규식

.+(:)


결과

http:

https:

ftp:


2개 전방 탐색의 차이는 기준 문자인 ":" 이 결과에 포함되냐 안되냐의 차이다.


19. ?<=기준문자  (후방 탐색, 즉 기준문자 오른쪽으로 찾기)

- 후방 탐색은  자바 및 몇몇 언어에서 제약적으로 지원하지만 자바스크립트에서는 지원하지 않는다.


원본 문자열

ABC01: $23.45

HGG42: $5.31

CFMX1: $899.00

Total items found: 4


정규식

(?<=$)[0-9.]+


결과

23.45

5.31

899.00


20. 조건달기

원본 문자열

11111

22222

33333-

44444-4444


정규식

\d{5}(-\d{4})?


결과

11111

22222

44444-4444


-------------------------------


아래 정규식이 조건달기인데 regexr.com 에서 안됨. 설명을 하자면 

숫자5개 이후 전방탐색(?=-) 으로 하이픈"-" 이 있으면 다음 조건인 숫자 4개가 있는거나 없는것을 찾는 것.


정규식

\d{5}(?(?=-)-\d{4})


결과

11111

22222

44444-4444




리눅스 tail 중 정규식 사용

grep -Po "(?<=<)[^>]*"

grep -Po "(?<=user=<)[^>]*"


grep --help | grep regex


-E, --extended-regexp     PATTERN is an extended regular expression (ERE)

-G, --basic-regexp        PATTERN is a basic regular expression (BRE)

-P, --perl-regexp         PATTERN is a Perl regular expression

-e, --regexp=PATTERN      use PATTERN for matching

-w, --word-regexp         force PATTERN to match only whole words

-x, --line-regexp         force PATTERN to match only whole lines

-o only matching


리눅스 vi에서 정규식 사용

http://egloos.zum.com/bazzinga/v/4829192



'Programming > Others' 카테고리의 다른 글

[대규모 시스템 설계 기초] 6장  (0) 2022.07.16
[대규모 시스템 설계 기초] 1장  (0) 2022.06.05
UTC, GMT 차이  (1) 2022.02.04
X-Forwarded-For  (0) 2019.08.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함