REGEX syntax

  • syntax: BRE, ERE

 

##1 POSIX REGEX: meta char

 

ERE (5) :  ? , + , {m,n} , | , ()

BRE (7) : dot(.) , * , ^, $ , [...] , [^...]  , \

https://deep-learning-challenge.tistory.com/92

 

[데이터베이스] Pattern match, Posix Regular Expression

[데이터베이스] Pattern match, Posix Regular Expression 데이터베이스 패턴 매치(Pattern match), Posix Regex 관련해서 공부한 내용을 포스팅하고자 합니다. 다음의 교재를 참고했음을 미리 밝힙니다. Pattern Match

deep-learning-challenge.tistory.com

https://www.ibm.com/docs/en/rational-clearquest/9.0.1?topic=tags-meta-characters-in-regular-expressions 

 

Meta characters in regular expressions

\ Marks the next character as either a special character or a literal. For example, n matches the character n, whereas \n matches a newline character. The sequence \\ matches \ and \( matches (. ^ Matches the beginning of input. $ Matches the end of input.

www.ibm.com

 

##2 Any single character

dot/period : .  - 임의의 문자

1) c.b:  cab, ccb, c2b ,c^b     즉 c와 b사이에 문자 하나가 들어감

2) a..b  :  axyb,  a^&b  ...

3) a.......b : 는 quantifier, interval 기법을 적용하는게 낫다.,

 

**참조1

  | : anonymouse pipe

앞에 있는 출력결과가 뒤에 있는 곳에 입력으로 들어감

var3grep에 입력으로 들어감.

 

**참조2

“ \$ ” $인식안시킬려면 \ (escape) 붙여서 $escape 시킴

“c\.b” metacharacter dot 앞에 backslash 입력 시 본연 의미(meta character)를 잃고 순수하게 문자 dot이 됨

 

##3 Quantifier(수량자)

#1. ?, +, *, {m,n}  - 수량자의 종류 는 총 4가지

 => 수량자는 선행문자 패턴(atom 이라고도 함) 을 수식하는 기능 가짐.

 

다음 각 패턴이 의미하는 것은?

  https://learn.microsoft.com/ko-kr/dotnet/standard/base-types/quantifiers-in-regular-expressions 

해당 MS 사이트 참조해서 풀어보자 !

X?ML

can*

can+

http.*

 

atom은 각각 X  , n , n , dot(.)  이 되겠다.

 

1) ?: question mark

2) *: asterrisk, star

3) + plus sign

4) {} :(curly) braces

 BRE :  2) * 수량자

ERE : 1) 3) 4) 수량자

 

#2. {m,n} - interval expression

1) abc{2,5} : abcc, abccc, abcccc

2) {n}, {n,} , {n,m} 이 표준  {,m}은 GNU extension

 

문제 :  ?, * , +를 {} 로 표현해보아라

1) {0,}   == ??          

2) {,1}  == ??

3) {1,} == ??

 

 

답:

1)  0~ 무한대 == * 

2) 0 ~1  == ?

3)  1~무한대  == +

 

#3 

* 0과 매칭이 되어 backtracking으로 느려질 가능성이 있다. 성능 중시한다면 backtracking을 피할 수 있도록 하자.

 

핵심은

* kleene start0개이상   ( 곱하기)

+ kleene plus1개이상이다. (더하기)

 

A * 0 = 0   

A *1 = A

A*2 = AA

....

 

A +0 = A  (1) 

A +"1개의 A" = A 

A+"2개의 A" = AA

...

 

#4   Quantifier (수량자) : BRE vs ERE

1) grep 은 기본값으로 BRE 작동하여, * 수량자만을 바로 사용가능

2) ERE인 수량자(*가 아닌 나머지, 상기 참조)는 \ (back slash)를 앞에 더해줘야만 grep 을 사용할 수 있다.

 

#5 egrep은 기본값으로  ERE 작동하여, *,+,?,{}  패턴의 모든 기능이 제공됨

 

##4. Anchor : 패턴 위치 지정하는 패턴

#1. 종류 : ^(caret), $ (dollar sign)

1) ^ftp  : "ftp" 로 시작하는 행

2) ^$: 비어있는 행(라인) (행의 시작과 끝에 아무런 문자없음)

3) <BR>$: <BR> 로 끝나는 경우

 

#2. 라인[개행문자(new line)] 단위로 처리하지 않는 경우 $는 문서의 끝을 의미,.

eg.  *vim :/. $s/a/b/g    :   a를  찾아 b로 바꿔라    // $는 마지막행

 


#3 Character sets

1). [ ], [^ ] - character class

 1) [abcd] : a,b,c,d 중 하나

 2) [0,9] : 0,1,2,..., 9

 3) [a-zA-Z0-9] : 대소문자 알파벳과 숫자

 4) [^0-9] : [0-9] 을 제외한 나머지   ( ^ : 여집합 기능,  [ ] 안에 오는 경우에한해)

 5) ^ 문자 자체를 그룹에 넣으려면  [0-9^]     만일 [^0-9] 면 (^가 [바로 뒤에오는경우는)  안됨 아니면 escape \ 사용하여 ^를 넣음.

 

#4 REGEX 로 단어 검색

$ grep --color "p[abcd]\+ous"

특정파일에 접근해서 단어패턴 찾아 출력해보기.

 

contifier : * , + , ? , {m,n}   4개

*: BRE ,  나머진 ERE

    grep의 matcher는 BRE matcher가 defatult 이다. ERE 사용시 앞에 \ 사용해야기에 + 앞에 \ 를 사용한거다.

 

#5 anchor를 이용한 패턴 수정

$ grep --color "p[abcd]\+ous$"

ous가 매칭의 끝부분에 등장하는 경우.

$  : $ 뒤로는 라인의 끝을 의미.

 

#6 log data 검색하는 경우 grep 활용해  로그를 뽑을 수 있다.

 

#7  grep : line control options.  

-A NUM,   --after-context=NUM print NUM lines of trailing context after matching lines
-B NUM,  --before-context=NUM Print NUM lines of leading context before matching lines
-C NUM, -NUM, --context=NUM Print NUM lines of output context
--group-separator=SEP Use SEP as a group seperator. By defaulrt SEP is double hyphen (--).
--no-group-separator Use empty string as a group separator

+ Recent posts