얕고넓은지식/linux

자주 사용하는 정규표현식

쪽마 2021. 11. 1. 17:13

1. 영문자 소문자, 숫자, "-", "_" 로만 구성된 길이 2 ~ 10자리 사이 문자열

 

/^[a-z0-9_-]{2,10}$/ 

 

 

2. 신용카드 번호

 

19자리 숫자와 "-": /^[0-9-]{19}$/

4-4-4-4 체크: /^[0-9]{4}[-\s\.]?[0-9]{4}[-\s\.]?[0-9]{4}[-\s\.]?[0-9]{4}$/

 

 

3. 영문자 대소문자와 숫자로만 구성

 

/[a-zA-Z0-9]/

 

 

4. 전화번호

 

3자리-3~4자리-4자리(사이에 1자 아무거나 가능)): /^[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3,4}[-\s\.]?[0-9]{4}$/

3자리-3~4자리-4자리(사이에 "-" 고정): /^\d{3}-\d{3,4}-\d{4}$/

휴대폰&전화번호: /(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/

휴대폰번호: /^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$/

 

 

5. UUID

 

/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/

 

 

6. 아스키II 코드만

 

/[ -~]/

 

 

7. 맥어드레스

 

/^[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}$/

 

 

8. IP주소(IPv4)

 

/(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}/

 

 

9. IP주소(IPv6)

 

/(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/

 

 

10. 이메일주소

 

기본체크: /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/

RFC5322: /\b[\w.!#$%&’*+\/=?^`{|}~-]+@[\w-]+(?:\.[\w-]+)*\b/

 

정밀체크: /(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/

 

 

11. 패스워드

 

최소 8자 이상으로 영문자 대문자, 영문자 소문자, 숫자, 특수문자가 각각 최소 1개 이상: /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,}$/

최소 8자 이상으로 숫자, 특수문자가 각각 최소 1개이상: /^(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,}$/

 

 

12. URL

 

프로토콜 포함: /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#()?&//=]*)/ 

프로토콜 옵션: /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/ 

URL: /^(file|gopher|news|nntp|telnet|https?|ftps?|sftp):\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/


 

13. HTML 태그

 

/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/

/<\/?[\w\s]*>|<.+[\W]>/

/<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)/

 

 

14. 하이퍼링크

 

/(?!<a\sname=\"([\w\s\d\-\.\#]+)\"><\/a>)<a\sname=\"([\w\s\d\-\.\#]+)\">(.*?)<\/a>/

 

 

15. 숫자만인지 체크

 

^(\(?\+?[0-9]*\)?)?[0-9_\- \(\)]*$

 

 

16. 웹사이트 하이퍼링크인지 체크

 

<a\s+(?:[^>]*)href=\"((?:https:\/\/|http:\/\/)(?:.*?))">(?:.*?)<\/a>

 

 

17 숫자와 영문자 대소문자만

 

공백없는 숫자와 영문자 대소문자: /^[a-zA-Z0-9]*$/

공백포함 숫자와 영문자 대소문자: /^[a-zA-Z0-9 ]*$/

영문자 대소문자: /[a-zA-Z]/

 

 

18. 년월일

 

yyyy-mm-dd: /^(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$/

 

 

19. 특수문자와 공백 선택

 

한글포함 특수문자와 공백: /[^?a-zA-Z0-9/]/

한글제외 특수문자와 공백: /[^-가-?a-zA-Z0-9/ ]/

 

 

20. 주민등록번호

 

/^[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[@]{1}[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[.]{1}[A-Za-z]{1,5}$/

 

 

 

추가

전자우편 주소: 

/^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/ 

URL: 

/^(file|gopher|news|nntp|telnet|https?|ftps?|sftp):\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/ 

HTML 태그 - HTML tags: /

\<(/?[^\>]+)\>/ 

전화 번호 - 예, 123-123-2344 혹은 123-1234-1234: 

/(\d{3}).*(\d{3}).*(\d{4})/ 

날짜 - 예, 3/28/2007 혹은 3/28/07: 

/^\d{1,2}\/\d{1,2}\/\d{2,4}$/ 

jpg, gif 또는 png 확장자를 가진 그림 파일명: 

/([^\s]+(?=\.(jpg|gif|png))\.\2)/ 

1부터 50 사이의 번호 - 1과 50 포함: 

/^[1-9]{1}$|^[1-4]{1}[0-9]{1}$|^50$/ 

16 진수로 된 색깔 번호: 

/#?([A-Fa-f0-9]){3}(([A-Fa-f0-9]){3})?/ 

적어도 소문자 하나, 대문자 하나, 숫자 하나가 포함되어 있는 문자열(8글자 이상 15글자 이하) - 올바른 암호 형식을 확인할 때 사용될 수 있음: 

/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,15}/



숫자만 가능 : [ 0 ~ 9 ] 주의 : 띄어쓰기 불가능

/^[0-9]+$/  

 이메일 형식만 가능

/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/

한글만 가능 : [ 가나다라 ... ] 주의 : ㄱㄴㄷ... 형식으로는 입력 불가능 , 띄어쓰기 불가능

/^[가-힣]+$/  

한글,띄어쓰기만 가능 : [ 가나다라 ... ] 주의 : ㄱㄴㄷ... 형식으로는 입력 불가능 , 띄어쓰기 가능

/^[가-힣\s]+$/  

영문만 가능 :

/^[a-zA-Z]+$/  

영문,띄어쓰기만 가능

/^[a-zA-Z\s]+$/  

전화번호 형태 : 전화번호 형태 000-0000-0000 만 받는다. ]

/^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$/  

도메인 형태, http:// https:// 포함안해도 되고 해도 되고

/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/

도메인 형태, http:// https:// 꼭 포함

/^((http(s?))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/
 
도메인 형태, http:// https:// 포함하면 안됨

/^[^((http(s?))\:\/\/)]([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/

한글과 영문만 가능

/^[가-힣a-zA-Z]+$/;

숫자,알파벳만 가능

/^[a-zA-Z0-9]+$/;

주민번호, -까지 포함된 문자열로 검색

/^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$/


Jquery 에서는 $.test() 메서드로,

PHP 에서는 preg_match() 함수로 사용

 

 

정규표현식의 기본 문법

정규표현식은 소프트웨어에 따라서 방식이나 지원 범위가 다를 수 있습니다.

^The The로 시작하는 문자열
of despair$ of despair로 끝나는 문자열
^abc$ abc로 시작하고 abc로 끝나는 문자열 (abc 라는 문자열도 해당됨)
notice notice가 들어 있는 문자열

 

ab* a 다음에 b가 0개 이상 (a, ab, abbb 등등)
ab+ a 다음에 b가 1개 이상 (ab, abbb 등등)
ab? a 다음에 b가 있거나 없거나 (ab 또는 a)

 

ab{2} a 다음에 b가 2개 있는 문자열 (abb)
ab{2,} a 다음에 b가 2개 이상 (abb, abbbb 등등)
ab{3,5} a 다음에 b가 3개에서 5개 사이 (abbb, abbbb, 또는 abbbbb)

*+?는 각각 {0,}{1,}{0,1}과 같습니다.

( )는 문자열을 묶음 처리할 때 사용
a(bc)* a 다음에 bc가 0개 이상 (묶음 처리)
a(bc){1,5} a 다음에 bc가 1개에서 5개 사이

 

hi|hello hi hello가 들어 있는 문자열
(b|cd)ef bef 또는 cdef
(a|b)*c a와 b가 섞여서 여러번 나타나고 그뒤에 c가 붙어있는 패턴

 

. (점) 임의의 한 문자
^.{3}$ 3문자로만 되어 있는 문자열

 

[ ] 괄호 안에 있는 내용 중 임의의 한 문자
[^ ] 첫문자로 ^를 쓰면 괄호 내용의 부정. 즉 괄호 안에 포함되지 않는 한 문자
[ab] 또는 b (a|b 와 동일한 표현)
[a-d] 소문자 a에서 d까지 (a|b|c|d 또는 [abcd] 와 동일)
^[a-zA-Z] 영문자로 시작하는 문자열
[0-9]% % 문자 앞에 하나의 숫자가 붙어 있는 패턴
%[^a-zA-Z]% 두 % 문자 사이에 영문자가 없는 패턴

 

특수 문자 자체를 검색하기 및 사용하기
\^ ^ \. .
\[ [ \$ $
\( ( \) )
\| | \* *
\+ + \? ?
\{ { \\ \
\n 줄넘김 문자 \r 리턴 문자
\w 알파벳과 _ (언더바) \W 알파벳과 _ 가 아닌 것
\s 빈 공간(space) \S 빈 공간이 아닌 것
\d 숫자 \D 숫자가 아닌 것
\b 단어와 단어 사이의 경계 \B 단어 사이의 경계가 아닌 것
\t Tab 문자 \xnn 16진수 nn에 해당하는 문자

[ ] 안에서는 특수 문자가 모두 효력을 잃게 됩니다.

 

검색 + 치환을 위한 하부식(부분식)
( )로 둘러싼 부분은 각각 하나의 덩어리로 취급해서,
검색시 ( ) 안에 해당되는 내용들을 변경할 내용에서 그대로 가져다 이용할 수 있습니다.
검색된 각각의 ( )안에 해당되는 내용은 변경할 내용에서 $1, $2, .. 등으로 지정해서 쓸 수 있습니다.
예제) mp3파일 이름 바꾸기
검색 : (.*) - (.*)\.mp3 .*은 길이에 상관없이 임의의 문자열, \.은 점
치환 : $2 - $1.mp3 앞에서 검색한 ( )안에 해당되는 내용끼리 순서 바꾸기
ex) "제목 - 연주자.mp3" Þ "연주자 - 제목.mp3"
앞에서 정의한 하부식을 다시 활용하기 (제가 잘못 이해한 것일 수도 있는데)
\n은 ( ) 하부식 중에서 n번째 하부식을 가리킵니다.
예제) (.+)\1+
\1로 되어 있으니까 첫번째 부분식 (.+)를 가리킵니다. 위 내용을 해석하자면, 일단 (.+)가 있으니까 이에 해당되는 내용을 찾고, \1+이 있으니까 첫번째 부분식 (.+)와 똑같은 내용이 그 뒤에 1번 이상 있는 문자열을 찾습니다.
예제) abab같은 문자열이 위에 해당되는데, 일단 (.+) 즉 임의의 문자열 ab를 찾고 그 뒤에 \1+로 첫번째 부분식을 다시 1번 이상 있는 것을 찾으니까 뒤의 ab가 이에 해당합니다.

 

변경자 ? 검색 방식 변경
(?i) 대소문자 무시 (기본값)
(?-i) 대소문자 구분
(?g) "greedy" 모드로 전환 (기본값)
(?-g) "greedy" 모드 해제, 따라서 "+"는 "+?"과 동일한 것으로 인식

 

 

 

 

반응형