정규 표현식

kinghong97·2022년 4월 28일
0

메타 문자

[] - [] 이거 안에 사이의 문자들과 매치 된다

ex. [a-z] 알파벳 소문자, [A-Z] 알파벳 대문자, [0-9] 숫자, [a-zA-Z0-9] 알파벳 전부 + 숫자

[]안의 ^는 반대의 의미

\d - 숫자와 매치, [0-9]와 같다
\D - 숫자가 아닌 것과 매치, [^0-9]와 같다
\s - 공백과 매치, [ \t\n\r\\f\v]와 같다
\S - 공백이 아닌 것과 매치, [^ \t\n\r\\f\v]와 같다
\w - 문자 + 숫자와 매치, [a-zA-Z0-9_]와 같다
\W - 문자 + 숫자가 아닌 것과 매치, [^a-zA-Z0-9_]와 같다

. - 아무 문자가 하나 있어야 매치 
ex. a.c => abc or a6c 매치됨 ac 매치안됨
? - 문자가 있거나 없거나 매치
ex. ab?c => ac 매치됨 abc 매치됨
{} - {a, b} 문자가 a번 이상 b번 이하 반복되면 매치, {a} 문자가 반드시 a번 반복되면 매치
ex. ab{2,4}c => abc 매치안됨 abbbbc 매치됨, ab{2}c => abbc만 매치됨
* - 문자가 0번 이상 반복되면 매치
ex. ab*c => ac 매치됨 abc 매치됨 abbbbbc 매치됨
+ - 문자가 1번 이상 반복되면 매치
ex. ab+c => ac 매치안됨 abc 매치됨 abbbbc 매치됨

상용 정규 표현식 (js버전)

한글 체크 정규식
"^[가-힣]+$"
/^[ㄱ-ㅎ|가-힣]$/;

특수문자 체크 정규식
/[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/g

이메일 체크 정규식
/^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i

핸드폰번호 정규식
/^\d{3}-\d{3,4}-\d{4}$/

휴대폰번호 체크 정규식
/^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/

일반 전화번호 정규식
/^\d{2,3}-\d{3,4}-\d{4}$/

js 플래그

/g
정규 표현식 뒤의 "g"는 전체 문자열을 탐색해서 
모든 일치를 반환하도록 지정하는 전역 탐색 플래그 
python에서는 search()로 대체되는 것 같다

ex.
var regex = new RegExp('foo', 'g');

console.log(regex.global);  // true

var str = 'fooexamplefoo';

var str1 = str.replace(regex, '');

console.log(str1);  // Output: example

var regex1 = new RegExp('foo');

var str2 = str.replace(regex1, '');

console.log(str2);  // Output: examplefoo


/i
대소문자 구분없이

ex.
const regex1 = new RegExp('foo');
const regex2 = new RegExp('foo', 'i');

console.log(regex1.test('Football'));
// expected output: false

console.log(regex2.test('Football'));
// expected output: true


/m
여러 줄 매칭

ex.
const regex1 = new RegExp('^football');
const regex2 = new RegExp('^football', 'm');

console.log(regex1.test('rugby\nfootball'));
// expected output: false

console.log(regex2.test('rugby\nfootball'));
// expected output: true

python 컴파일 옵션

DOTALL, S
.에 \n도 포함

IGNORECASE, I
대소문자 무시

MULTILINE, M
여러줄 매칭

매서드

js

정규식.exec(문자열)
return 일치하는 문자열 없으면 null

정규식.test(문자열)
return ture false

문자열.match(정규식)
return 일치하는 문자열 array 없으면 null

문자열.replace(정규식, 대체문자)
일치하는 문자열을 새로운 문자열로 대체하고, 대체된 결과를 문자열로 반환


python

정규식.match(문자열)
문자열의 처음부터 정규식과 매치하는지 조사, 매치된 객체 반환

정규식.search(문자열)
문자열 전체를 검색, 매치된 객체 반환

정규식.findall(문자열)
매치되는 것 모두 리스트로 반환

정규식.finditer(문자열)
매치되는 것 모두 객체로 반환

match의 매서드

group()
매치된 문자열 반환

start()
매치된 문자열 시작 위치 반환

end()
매치된 문자열 끝 위치 반환

span()
매치된 문자열 시작, 끝 위치 튜플로 반환

ex.
>>> m = p.match("python")
>>> m.group()
'python'
>>> m.start()
0
>>> m.end()
6
>>> m.span()
(0, 6)

정규식 만들기?

js

const re = /\w+\s/g;
or
const re = new RegExp('\\w+\\s', 'g');

const str = 'fee fi fo fum';

const myArray = str.match(re);

// ["fee ", "fi ", "fo "]

python

import re
p = re.compile('a.b', re.S)
m = p.match('a\nb')
>>> print(m)
<re.Match object; span=(0, 3), match='a\nb'>

python 백슬래쉬 문제

'\section' 같은 거 해결하려면
'\\\\section' 이렇게 작성해야하는데
r'\\section' 이렇게하면 간단하게 해결

참고:
https://velog.io/@jangws/JS-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D%ED%8A%B9%EC%88%98%EB%AC%B8%EC%9E%90-%EC%88%AB%EC%9E%90-%EB%93%B1-6766k8d6

https://wikidocs.net/4308#_4

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions

0개의 댓글