정규표현식 만드는 연습을 하는 중임.

예제를 들어 연습중인 것들을 설명한다.

기본 설명은 여기 참고.

 

regex 의 실제 적용 테스트는 아래 사이트에서 할 수 있다.

https://regex101.com/ 

https://regexr.com/

 


시작은 ^ 끝은 $
6, 4 로 외우자.

만약 ^ 가 없으면, 정규표현식이 문자열의 처음부터 시작하지 않아도 매치되는 곳을 찾음.
예를 들어
qwertyuiop 라는 문자열에서 
[aeiou].* 은 qwertyuiop 와 매칭되고
^[aeiou].* 은 qwertyuiop 와 매칭된다(아무것도 매칭되지 않는다).
왜냐하면 문자열의 처음(q)과 regex 의 처음( [aeiou] ) 이 매칭되지 않으니까

만약 $ 가 없으면, 정규표현식이 문자열의 마지막에 맞추지 않아도 매치되는 곳을 찾음.
예를 들어
qwerty 라는 문자열에서
[w].[t] 는 qwerty 와 매칭되고
[w].[t]$ 는 qwerty 와 매칭된다(아무것도 매칭되지 않는다).
왜냐하면 문자열의 마지막(y) 과 regex 의 마지막( [t] ) 이 매칭되지 않으니까.


[] 는 하나의 문자열만을 나타낸다.
예를 들어
[a] 면 a 만 매칭되고 b는 매칭되지 않는다.
[b] 면 b 만 매칭되고 c, q, e, y, 9 , E, P, -, 2 등은 매칭되지 않는다.
[ab] 면 a, b 만 매칭되고 k, l, G, U=, +, ) 등은 매칭되지 않는다.
[a-z]면 a, b, c, d, e, ...., z 는 매칭되고, 0, +, Q, A, Z, -, 2, $ 등은 매칭되지 않는다.
[a-zA-Z] 면 모든 알파벳이 매칭된다.

그래서 어떤 문자열이 0개 이상 존재해야하는지 검사하고 싶을 때는 [\w]+ 이렇게 사용한다.

만약 특정 문자가 제외되었는지 확인하려면 ^ 을 사용한다.
예를 들어
[^a] 면 a 는 매칭되지 않고 다른 모든 문자열은 매칭된다.
[^ieaou] 면 영어 알파벳의 자음은 매칭되고 모음은 매칭되지 않는다.


특정 문자열이 존재하는지 안하는지 보고 싶을때는 그냥 단순히 적어주면 된다.
예를 들어
url 패턴을 찾는 과정에서 앞에 http 가 반드시 들어가는지 확인하려면
그냥 단순히 ^ http .... $ 해주면 된다.


http 혹은 https 로 시작하는지 확인하는 등의 작업처럼
s 가 있는지 없는지 체크하려면 ? 를 붙이면 된다.
예를 들어
https?
그러면 ? 앞의 s 가 0개 혹은 1개 가 있는지 확인한다.
http, https 모두 매칭된다.

만약 s 가 아니라 ss 가 있는지 확인하고 싶다면?
http(ss)?
그러면 http, httpss 가 매칭된다.

만약 http, https, httpss 모두 매칭시키고 싶다면?
http(s|ss)?

한 위치에 이거 혹은 이거 를 나타내고 싶다면 | 를 사용하면 된다.
예를 들어 gray 혹은 grey 를 모두 나타내고 싶다면
gr(a|e)y

참고로 http url 을 정규표현식으로 확인하려면 다음 regex 를 사용하면 된다.

https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)

https://stackoverflow.com/a/3809435


지역 번호처럼 02, 033, 061 등이 맨 앞에 오는지 확인하려면
다음과 같이 해준다.
^(02|033|061)
위의 regex는 02 혹은 033 혹은 061 과 매칭된다.


원하는 문자들이 원하는 조건 하에 원하는 위치에 있길 바란다면 ()를 사용하면 된다.
예를 들어
첫번째 위치에는 http 가 와야 하고
두번째 위치에는 www 가 와야 한다면
^(http)(www)

위의 regex 에 조건들을 달아서 업그레이드 할 수 있다.
예를 들어
^(https?)(w{3})

괄호 하나 당 하나의 독립된 영역이라고 보면 되겠다.

?, *, +, {} 등은 어떤 문자가 얼마나 와야하는지 나타낸다.

? : 앞의 문자가 0번 또는 1번 존재하는 패턴을 찾는다.
ab?c 는 ac, abc 를 찾을 수 있지만, abbc, abbbc, abbbbc, aXc 는 찾을 수 없음.
a(bc)?d 는 ad, abcd 를 찾을 수 있지만, abd, abbd,acd, accd, abcbcd, aXXd 는 찾을 수 없음.
a[bc]?d 는 ad, abd, bcd 를 찾을 수 있지만, abcd, abbd,abbbd,accd, acccd, abcbcd 는 찾을 수 없음.

* : 0번 이상 존재하는 패턴을 찾는다.
ab*c 는 ab, abc, abbc, abbbc, abbbbc 를 찾을 수 있지만, aXbc, abXc, aXc 는 찾을 수 없음.
a(bc)*d 는 ad, abcd, abcbcd, abcbcbcd, abcbcbcbcd 를 찾을 수 있지만, aXbcd, abcXd, abXcd 는 찾을 수 없음
a[bc]*d 는 ad, abd, abbd, abbbbbbbd, acd, accd, acccccccd 를 찾을 수 있지만, aXbd, aXcd, abXd, acXd 는 찾을 수 없음

+ : 1번 이상 존재하는 패턴을 찾는다.
ab+c 는 abc, abbc, abbbc, abbbbc 를 찾을 수 있지만, ab, aXbc, abXc, aXc 는 찾을 수 없음.
a(bc)+d 는 abcd, abcbcd, abcbcbcd, abcbcbcbcd 를 찾을 수 있지만, ab, aXbcd, abcXd, abXcd 는 찾을 수 없음
a[bc]+d 는 abd, abbd, abbbbbbbd, acd, accd, acccccccd 를 찾을 수 있지만, ab, aXbd, aXcd, abXd, acXd 는 찾을 수 없음

{n} 정확히 n 번만큼 존재하는 패턴을 찾는다.
ab{3}c 로 찾을 수 있는 패턴은 abbbc 이다.
a(bc){3}d 로 찾을 수 있는 패턴은 abcbcbcd 이다.
a[bc]{3}d 로 찾을 수 있는 패턴은 abbbd, acccd 이다.

{min,} "min"번 이상만큼 발생하는 패턴을 찾는다.
ab{3,}c 로 찾을 수 있는 패턴은 abbbc, abbbbc, abbbbbbbc 이다.
a(bc){3,}d 로 찾을 수 있는 패턴은 abcbcbcd, abcbcbcbcd, abcbcbcbcbcbcbcd 이다.
a[bc]{3,}d 로 찾을 수 있는 패턴은 abbbd, abbbbd,abbbbbbbbd, acccd, accccd, acccccccccd 이다.

{min,max} 적어도 "min"번 이상 "max" 미만 발생하는 패턴을 찾는다.
ab{3,5}c 로 찾을 수 있는 패턴은 abbbc, abbbbc, abbbbbc 이다.
a(bc){3,5}d 로 찾을 수 있는 패턴은 abcbcbcd, abcbcbcbcd, abcbcbcbcbcd 이다.
a[bc]{3,5}d 로 찾을 수 있는 패턴은 abbbd, abbbbd, abbbbbd, acccd, accccd, acccccd 이다.


. : 문자 하나

[^] : 부정문(exclude)
a[^bc]d 는 aXd, aYd, a!d, a0d 등을 찾을 수 있지만, abd, acd 는 찾을 수 없음

[0-9] : 숫자 하나
[^0-9] : 숫자가 아닌 문자 하나
[\d] : 숫자 하나
[\D] : 숫자가 아닌 문자 하나
[a-z] : 영문 알파벳 소문자 하나
[A-Z] : 영문 알파벳 대문자 하나
[a-zA-Z] : 영문 알파벳 하나
[^a-zA-Z] : 영문 알파벳이 아닌 문자 하나
[a-z0-9] : 영문 알파벳 소문자 혹은 숫자 하나
[A-Za-z0-9] : 영문 알파벳 혹은 숫자 하나
[^A-Za-z0-9] : 영문 알파벳 혹은 숫자가 아닌 다른 문자 하나
[ \t\r\n\v\f] : 공백 문자 하나
[^ \t\r\n\v\f] : 공백이 아닌 문자 하나
[\s] : 공백 문자 하나
[\S] : 공백이 아닌 문자 하나
[가-힣] : 한글 하나
[^가-힣] : 한글이 아닌 문자 하나
[\w] : 영문 알파벳 혹은 숫자 혹은 _ 하나
[^\w] : 영문 알파벳, 숫자, _ 가 아닌 문자 하나

 

 

 

+ Recent posts