본문 바로가기
개발/개발에 유용한 팁

Regular Expression

by 카리3 2021. 3. 7.

문법 정리

Groups and ranges

Chracter뜻

| 또는
() 그룹
[] 문자셋, 괄호안의 어떤 문자든
[^] 부정 문자셋, 괄호안의 어떤 문가 아닐때
(?:) 찾지만 기억하지는 않음

Quantifiers

Chracter뜻

? 없거나 있거나 (zero or one)
* 없거나 있거나 많거나 (zero or more)
+ 하나 또는 많이 (one or more)
{n} n번 반복
{min,} 최소
{min,max} 최소, 그리고 최대

Boundary-type

Chracter뜻

\b 단어 경계
\B 단어 경계가 아님
^ 문장의 시작
$ 문장의 끝

Character classes

Chracter뜻

\ 특수 문자가 아닌 문자
. 어떤 글자 (줄바꿈 문자 제외)
\d digit 숫자
\D digit 숫자 아님
\w word 문자
\W word 문자 아님
\s space 공백
\S space 공백 아님

 

플래그(flags)

정규 표현식을 생성할 때 플래그를 사용하여 기본 검색 설정을 변경할 수 있습니다.

이렇게 설정된 플래그는 나중에 추가되거나 삭제될 수 없습니다.

플래그(flag)설명

i 검색 패턴을 비교할 때 대소문자를 구분하지 않도록 설정함.
g 검색 패턴을 비교할 때 일치하는 모든 부분을 선택하도록 설정함.
m 검색 패턴을 비교할 때 여러 줄의 입력 문자열을 그 상태 그대로 여러 줄로 비교하도록 설정함.
^(첫번째 문자)와 $(마지막 문자)가 (\n, \r로 구분되는) 행단위로 일치
y 대상 문자열의 현재 위치부터 비교를 시작하도록 설정함.

 

설명(Description)

정규표현식은 다음과 같은 경우 사용한다.

  • 문자열에서 특정 문자열이 존재하는지 확인
  • 문자열의 특정 부분을 다른 문자열로 변경

CharacterMeaning

\ 이스케이핑(escaping)
^ 범위, 시작 지점,
$ 범위, 끝나는 지점
* 수량, 없거나 더 많다 == {0,}
+ 수량, 1보다 많다. == {1,}
? 수량, 없거나 하나이다.
. 일치, 문자 하나와 일치
(x) 일치, x와 일치하는 것을 찾은 후에 이에 접근할수 있도록 함
x|y 일치. x나 y와 일치
t{n} 수량. t와 n번 일치하는 문자열과 일치
t{n,} 수량, t와 n번 이상 일치하는 문자열과 일치
t{n,m} 수량. t와 n번 이상 m번 이하로 일치하는 문자열과 일치
[xyz] 일치. xyz중에 하나라도 일치하는 문자열과 일치

 

정규식 패턴(표현식)

표현식의 다양한 특수기호(패턴)는 그 기호의 의미(기능)와 매칭되어 인식되지 않기 때문에 따로 외우지 않으면 의미를 파악할 수가 없습니다.
우선 기본적인 의미를 아래의 표에 정리했습니다.

정규식 패턴설명

^ 줄(Line)의 시작에서 일치, /^abc/
$ 줄(Line)의 끝에서 일치, /xyz$/
. 임의의 한 문자와 일치
a|b a 또는 b와 일치, 인덱스가 작은 것을 우선 반환
* 0회 이상 연속으로 반복되는 문자와 가능한 많이 일치, {0,}와 동일
*? 0회 이상 연속으로 반복되는 문자와 가능한 적게 일치(lazy), {0}와 동일
+ 1회 이상 연속으로 반복되는 문자에 가능한 많이 일치, {1,}와 동일
+? 1회 이상 연속으로 반복되는 문자에 가능한 적게 일치(lazy), {1}와 동일
? 없거나 1회 가능한 많이 일치
?? 없거나 1회 가능한 적게 일치(lazy)
{3} 3(숫자)개 연속 일치
{3,} 3개 이상 연속 일치
{3,5} 3개 이상 5개 이하(3~5개) 연속 일치
{3,5}? 3개 이상 5개 이하(3~5개) 연속 중 가능한 적은 3개 연속 일치(lazy), {3}와 동일
() 캡처(Capture)할 그룹
(?<>) 캡처 그룹 이름 지정, /(?<name>pattern)/ ES2018
\1~9 정규식 내 캡처된 값 참조, /(abc)\1/
(?:) 캡처(Capture)하지 않는 그룹
(?=) 앞쪽 일치(Lookahead), /ab(?=c)/
(?!) 부정 앞쪽 일치(Negative Lookahead), /ab(?!c)/
(?<=) 뒤쪽 일치(Lookbehind), /(?<=ab)c/ ES2018
(?<!) 부정 뒤쪽 일치(Negative Lookbehind), /(?<!ab)c/ ES2018
[abc] a 또는 b 또는 c와 일치, 점(.)이나 별표(*) 같은 특수 문자는 []안에서 특수 문자가 아님, /\.[.]/
[a-z] a부터 z 사이의 문자 구간에 일치(영어 소문자)
[A-Z] A부터 Z 사이의 문자 구간에 일치(영어 대문자)
[0-9] 0부터 9 사이의 문자 구간에 일치(숫자)
[가-힣] 가부터 힣 사이의 문자 구간에 일치(한글)
[2-7] 2부터 7 사이의 문자 구간에 일치(2,3,4,5,6,7)
[b-f] b부터 f 사이의 문자 구간에 일치(b,c,d,e,f)
[다-바] 다부터 바 사이의 문자 구간에 일치(다,라,마,바)
[^abc] a 또는 b 또는 c가 아닌 나머지 문자에 일치(부정)
\ 이스케이프 문자, /\.\?\/\$\^/
\b 63개 문자(영문 대소문자 52개 + 숫자 10개 + _(underscore))가 아닌 나머지 문자에 일치하는 경계(boundary)
\B 63개 문자에 일치하는 경계
\d 숫자(Digit)에 일치
\D 숫자가 아닌 문자에 일치
\p{} 유니코드 속성(Property) 집합에 맞는 문자에 일치, /\p{Emoji}/u ES2018
\P{} 유니코드 속성 집합에 맞지 않는 문자에 일치, /\p{Uppercase}/u ES2018
\s 공백(Space, Tab 등)에 일치
\S 공백이 아닌 문자에 일치
\w 63개 문자(Word, 영문 대소문자 52개 + 숫자 10개 + _)에 일치
\W 63개 문자가 아닌 나머지 문자에 일치
\x 16진수 문자에 일치, /\x61/는 a에 일치
\0 8진수 문자에 일치, /\141/은 a에 일치
\u 유니코드(Unicode) 문자에 일치, /\u0061/는 a에 일치
\c 제어(Control) 문자에 일치
\f 폼 피드(FF, U+000C) 문자에 일치
\n 줄 바꿈(LF, U+000A) 문자에 일치
\r 캐리지 리턴(CR, U+000D) 문자에 일치
\t 탭 (U+0009) 문자에 일치
$` 문자 대체(replace) 시 일치한 문자 이전 값 참조
$' 문자 대체(replace) 시 일치한 문자 이후 값 참조
$+ 문자 대체(replace) 시 마지막으로 캡처된 값 참조
$& 문자 대체(replace) 시 일치한 문자 결과 전체 참조
$_ 문자 대체(replace) 시 입력(input)된 문자 전체 참조
$1~9 문자 대체(replace) 시 캡처(Capture)된 값 참조

자바스크립트 메소드

정규표현식을 다루는 다양한 메소드(Methods)들을 살펴봅시다.

메소드문법설명

exec 정규식.exec(문자열) 일치하는 하나의 정보(Array) 반환
test 정규식.test(문자열) 일치 여부(Boolean) 반환
match 문자열.match(정규식) 일치하는 문자열의 배열(Array) 반환
search 문자열.search(정규식) 일치하는 문자열의 인덱스(Number) 반환
replace 문자열.replace(정규식,대체문자) 일치하는 문자열을 대체하고 대체된 문자열(String) 반환
split 문자열.split(정규식) 일치하는 문자열을 분할하여 배열(Array)로 반환
toString 생성자_정규식.toString() 생성자 함수 방식의 정규식을 리터럴 방식의 문자열(String)로 반환

 

strikerhan.tistory.com/24?category=150509

www.youtube.com/watch?v=t3M6toIflyQ&t=582s

regexr.com/5mhou

 

checkbox radio select 유용한 스크립트 7

/*  * checkbox object checked 속성 체크  */ function all_check(obj, true_or_false) {    if (obj)    {        if (obj.length)        {            for (var i=0; i     ..

strikerhan.tistory.com

 

'개발 > 개발에 유용한 팁' 카테고리의 다른 글

클린코드  (0) 2021.07.21
Mybatis 쿼리 바인딩 로그 출력  (0) 2020.08.24
MessageBundle DB로 전환  (0) 2020.08.23
Mysql vo 만들기  (0) 2020.08.15
톰캣 재시작 없이 Java 수정  (0) 2020.08.15