REGEX

BERT·2023년 3월 27일
0

Linux

목록 보기
21/24

Greedy matching

pattern이 최대한 많은 수의 매칭을 하려고 하는 성질

POSIX RE에서는 non-greedy matching 수량자 제공하지 않음
PCRE에서는 non-greedy matching 가능한 quantifier 제공 : lazy quantifier
vim 은 POSIX BRE를 사용하지만 non-greedy 수량자인 \{-} 제공

vim

/<.\+>

/<.\{-}>

lazy quantifier

grep -P "<.+?>"
PCRE에서만 지원되므로 -P 옵션 사용

BRE vs ERE

BRE 사용 유틸 grep vim sed
ERE 사용 유틸 egrep awk sed+option

grep *

grep +

grep \+

egrep +

네이버 페이지에서 url 링크 추출


Parentheses

back-reference

매칭된 결과를 다시 사용하는 패턴
()로 묶인 패턴 매칭 부분을 \N의 형태로 재사용

(.+)부분을 \1에서 재사용; 같아야 함

group alternation

cat 또는 dog
child 또는 boy가 0개 이상 존재

Substitution

sed

BRE(default)

ERE -re 사용

awk

[ ]* 앞 뒤 공백도 제거


Boundary

ERE 표현식
\b boundary가 맞는 표현식 검색
\B boundary에 맞지 않는 표현식 검색

Predefined character class

클래스설명PCRE Set
[[:cntrl:]]제어문자[\x00-\x1f\x7f]
[[:space:]]white space[ \t\r\n\v\f]
[[:print:]]출력 가능한 문자[ -~]
[[:graph:]]공백 제외 출력 가능한 문자[!-~]
[[:punct:]]특수문자[!-/:-@\[-'{-~]

Hangul, Hanja

REGEX tester

https://regex101.com/

glob tester

https://www.globtester.com/

backtracking

피하려면?

  • .* 혹은 .+와 같이 greedy한 표현식 최소화
  • 공백을 반복할 수 있는 표현식 최소화

0개의 댓글