1. 정규 표현식은 문자열 검색이나 치환 작업을 빠르고 정확하게 하기 위하여

    정해진 규칙에 따라 일반 문자와 메타 문자를 적절히 조합해서 만든 문자열 패턴이다.


    정규 표현식은 대소문자를 구분한다.

 

 

2. 메타 문자: 문자 그대로 사용되지 않고 특별한 의미로 사용되는 문자
    예를 들면 마침표(.) 대괄호([]), 플러스(+), 스타(*), 캐럿(^) 등등
 

    역슬래시(\)는 메타 문자들이 문자 그대로 사용되게 하며(이스케이프), 특수한 문자 시퀀스를 시작하는

    데 사용된다.

 

 

3. 마침표(.): 아무 문자(빈칸, 탭 같은 공백 문자, 숫자, 특수문자 등도 포함) 하나와 일치
                      .. 또는 ...처럼 연달아 쓸 수도 있다.
   

    마침표(.) 자신만 찾으려면 \.을 사용
    역슬래시(\) 자신만 찾으려면 \\를 사용
  

    b.d: bad, b d, b.d, b\d, b2d, b@d, b?d, bAd, b*d, b[d ... 등과 일치하지만
           bd, Bad, baD, baad ... 등과는 일치하지 않는다.

    b..d: babd, bCad, baad, b..d, b34d ... 등과 일치
    b\.d: b.d와만 일치
    b\\d: b\d와만 일치

 

 

4. 대괄호([]): 대괄호 안에 포함된 문자들(집합) 중 어느 하나와 일치
    대괄호 안에 찾을 문자들을 열거할 때는 띄어쓰기 없이 일일이 붙여서 열거하거나,
    하이픈(-)을 사용하여 범위를 지정할 수 있다.
    하이픈(-)은 대괄호 안에서만 메타 문자이다.
    하이픈(-)으로 범위를 지정할 때는 범위의 시작값-끝값의 형식으로 지정한다.
    즉, [a-f] 또는 [1-5]는 문법에 맞지만 [f-a] 또는 [5-1]은 문법에 맞지 않는다.


    [Cc]: C 또는 c
    [0-4] or [01234]: 0, 1, 2, 3, 4 중 어느 하나
    [B-F] or [BCDEF]: B, C, D, E, F 중 어느 하나
    [ns]a: na 또는 sa
    [A-Za-z0-9]: 대소문자를 구분하지 않고 영문자나 숫자 중 하나
    #[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]: #000000,
        #336633, #ffffff 와 같은 #으로 시작하는 6자리 16진수 찾기
    myArray\[[0-9]\]: myArray[0], myArray[1], myArray[2] ... 등을 찾을 때

 

 

5. [^]: 찾을 때 제외하고 싶은 문자 목록은 대괄호 안에 캐럿을 써주어서 지정한다.

           [^제외할 문자목록]의 형식


    [^0-9]: 숫자를 제외한 어느 한 문자와 칠치
    [^a]: a를 제외한 어느 한 문자나 숫자와 일치
    [^ns12]: n 또는 s, 1, 2를 제외한 어는 한 문자나 숫자와 일치

 

 

6. 공백 문자(텍스트에 포함되어 있지만 보이지 않는 문자) 찾기
    \n: 줄바꿈(뉴 라인)
    \r: 캐리지 리턴
    \t: 탭
    \r\n: 윈도우에서 줄바꿈 문자
    \f: 페이지 넘김(폼 피드)
    \v: 수직 탭
    [\b]: 백스페이스


    \s: 공백 문자인 폼 피드, 뉴 라인, 캐리지 리턴, 탭, 수직 탭 중 하나, [\f\n\r\t\v]와 동일
    \S: [^\f\n\r\t\v]와 동일, 공백 문자를 제외한 어느 한 문자


    참고1) \s에 백스페이스 즉, [\b]는 포함되지 않음

    참고2) \s와 \S처럼 특정 매타 문자를 대문자로 바꾸면 반대의 의미가 된다.

   

 

 

7. 숫자 찾기, 숫자가 아닌 문자 찾기
    \d: 숫자 하나, [0-9]와 동일
    \D: 숫자를 제외한 문자 하나 , [^0-9]와 동일


    myArray\[\d\]: myArray\[[0-9]\]와 동일

 

 

8. 영문 & 숫자 & 언더바
    \w: 영문 대소문자, 숫자, 언더바 중 하나, [a-zA-Z0-9_]
    \W: 영문 대소문자, 숫자, 언더바를 제외한 문자 중 하나, [^a-zA-Z0-9_]


   참고) 영숫자: 영문 대소문자와 숫자를 합하여 부르는 말

 

 

9. 8진수와 16진수 표현
    16진수: \x로 시작
    8진수: \0로 시작


     \011: 아스키문자 9로 \t와 동일


   참고) \0에서 0은 숫자 영

 

 

10. 포직스(posix) 문자: 여러 문자 집합을 줄여 쓰는 방법
      일부 언어(예, 자바스크립트)에서는 포직스 문자를 지원하지 않는다
      [:alnum:]: 모든 영숫자, [[:alnum:]]는 [a-zA-Z0-9]와 동일
      [:alpha:]: 모든 영문자, [[:alpha:]]는 [a-zA-Z]와 동일
      [:blank:]: 반칸(space)이나 탭 문자(\t)
      [:cntrl:]: 아스키 제어문자(아스키 0번부터 31, 127번)
      [:digit:]: 한 자리 숫자, [[:digit:]]는 [0-9]와 동일
      [:graph:]: [:print:]와 동일하나 빈칸(space)은 제외
      [:lower:]: 모든 소문자, [[:lower:]]는 [a-z]와 동일
      [:print:]: 출력 가능한 모든 문자
      [:punct:]: [:lanum:]이나 [:cntrl:]가 포함되지 않은 모든 문자
      [:space:]: 빈칸을 포함하는 모든 공백 문자, [[:space:]]는 [\f\n\r\t\v ]와 동일
      [:upper:]: 모든 대문자, [[:upper:]]는 [A-Z]와 동일
      [:xdigit:]: 모든 16진수 숫자, [[:xdigit:]]는 [a-fA-F0-9]와 동일

 

 

11. 플러스(+): 적어도 하나(한번) 이상 연속(반복)되는 문자열 찾기
      플러스 기호 바로 앞의 문자 또는 집합의 원소가 적어도 하나는 있어야 일치


      a+: 하나 이상 연속된 a 즉, a, aa, aaa, aaaa, aaaaa, ... 등을 찾는다.
      ba+: ba, baa, baaa, baaaa, ... 등을 찾는다.
      [0-9]+: 한자릿수 이상의 연속된 숫자 찾기
      [0-9+]: 0 - 9 사이 숫자나 + 기호 중 하나
      \w+: 하나 이상 연속된 영숫자와 언더바로 이루어진 문자열 찾기
      [\w.]+: 하나 이상 연속된 영숫자와 언더바와 마침표로 이루어진 문자열 찾기


      참고 1) 마침표(.)나 플러스(+) 같은 메타 문자가 대괄호 안에서 사용되면 앞에
                   역슬래시를 붙이지 않아도 자동으로 이스케이프되어 일반 문자로 취급된다.
      참고 2) 플러스 기호(+) 자신만 찾으려면 \+ 사용

 

 

12. 스타(*): 없거나 하나(한번) 이상 연속(반복)되는 문자열 찾기
      스타 기호 바로 앞의 문자 또는 집합의 뭔소가 없거나 하나(한번) 이상 연속(반복)되면 일치


      B.* Forta: B Forta, B. Forta, Ben Forta ... 등과 일치


      스타 기호(*) 자신만 찾으려면 \* 사용

 

 

13. 물음표(?): 없거나 오직 하나(한번)만 있는 문자 찾기
      물음표 바로 앞의 문자 또는 집합의 원소가 없거나 오직 하나(한번)만 있어야 일치
 

      https?://는 http:// 또는 https://와 일치

     물음표(?) 자신만을 찾으려면 \? 사용

 

 

14. 중괄호({}): 일치하는 구간(연속 or 반복)을 지정하는 수량자(quantifier)
      {n}: 정확히 n개만 일치
      {n,}: n개 이상 일치
      {n,m}: 최소 n개에서 최대 m개까지 일치

 

      참고) n >=0, n < m


      +, *, ?도 수량자이다.

      +는 {1,}, *는 {0,}, ?는 {0,1}와 동일.


      [0-9]{3}: 000, 099, 100, 312, 999 등과 같은 세자리 숫자와 일치
      #[0-9A-Fa-f]{6}: #으로 시작하는 여섯자리 16진수와 찾기(예: #0066ff)

 

 

15. 탐욕적(greedy) 수량자, 게으른(lazy) 수량자
      +, *, {n,}는 가능한 한 가장 큰 덩어리를 찾으려는 속성을 지닌 탐욕적 수량자이다.


      탐욕적 수량자를 가능한 한 가장 작은 덩어리를 찾도록 게으른 수량자로 바꾸려면
      탐욕적 수량자 뒤에 물음표(?)를 붙여준다.

 

      탐욕적 수량자      게으른 수량자

      +                             +?

      *                             *?

      {n,}                        {n,}?

 

      소스:
      This offer is not available to customers living in <B>AK</B> and <B>HI</B>.
      정규 표현식: <[Bb]>.*</[Bb]>
      결과: 

      This offer is not available to customers living in <B>AK</B> and <B>HI</B>.
      정규 표현식: <[Bb]>.*?</[Bb]>
      결과:

      This offer is not available to customers living in <B>AK</B> and <B>HI</B>.

 

 

16. \b: 단어의 경계를 지정하여 찾기(단어의 시작 또는 끝과 일치)
      \bcat: cat로 시작하는 모든 단어와 일치
      cat\b: cat로 끝나는 모든 단어와 일치
      \bcat\b: 앞뒤에 다른 철자가 붙지 않는 온전한 단어 cat와만 일치
      \Bcat\B: 앞뒤에 다른 철자가 붙어있는(단어 중간에 쓰인) cat와만 일치

 

      소스
      The captain wore this cap and cape proudly as he sat listening to the recap of how his
      crew saved the men from a capsized vessel.
      정규 표현식: cap
      결과:

      The captain wore this cap and cape proudly as he sat listening to the recap of how his
      crew saved the men from a capsized vessel.
      정규 표현식: \bcap
      결과 :

      The captain wore this cap and cape proudly as he sat listening to the recap of how his
      crew saved the men from a capsized vessel.
      정규 표현식: cap\b
      결과:

      The captain wore this cap and cape proudly as he sat listening to the recap of how his
      crew saved the men from a capsized vessel.
      정규 표현식: \bcap\b
      결과:

      The captain wore this cap and cape proudly as he sat listening to the recap of how his
      crew saved the men from a capsized vessel.
      정규 표현식: \Bcap\B
      결과:

      The captain wore this cap and cape proudly as he sat listening to the recap of how his
      crew saved the men from a capsized vessel.

 

    참고) 일부 언어는 단어의 시작은 \<, 단어의 끝은 \>로 \b를 세분화한 메타 문자를 지원하지만
              오토잇은 \<와 \>를 지원하지 않는다.

 

 

17. 문자열의 시작 또는 끝과 일치

      캐럿(^): 문자열의 시작과 일치, 찾으려는 문자열 앞에 ^을 붙여준다.

      달러($): 문자열의 끝과 일치, 찾으려는 문자열 끝에 $를 붙여준다.

 

      소스:

      Who is who

      정규 표현식: ^[Ww]ho

      결과:

      Who is who

      정규 표현식: [Ww]ho$

      결과:

      Who is who

 

 

18. 괄호(()): 하위 표현식

      큰 표현식 안에 속한 일부 표현식을 한 항목으로 취급하도록 한데 묶는 것.

 

      +, *, ?, {} 같은 수량자들은 바로 앞에 있는 문자나 메타 문자에만 적용되다. 앞에 있는

      2개 이상의 문자나 메타 문자에 수량자를 적용하려면 괄호(())로 묶어준 다음에 수량자를

      붙여준다 . 

 

      OR 연산자(|)의 적용 범위를 명확하게 표현하기 위해서서도 괄호를 사용할 수 있다.

 

     괄호는 중첩해서(nest) 사용할 수 있다.

     

      참고) 여는 괄호나 닫는 괄호 자신만을 찾으려면 \(, \) 사용

     

      (&nbsp;){2,}: HTML 코드에서 2개 이상 연속되는 강제 공백문자를 찾을 때

       (\d{1 ,3}\. ) {3} \ d{1 ,3}: \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}과 동일(완전하지 않은 IP 주소 찾기)

       (19|20|21)\d{2}: 1900, 1901, 1902 ... 2000, 2001, 2002, ... 2100, 2101, 2102, ... 1900이상의 네자릿수 년도 찾기


 

 

Regular Expressions Tutorial

http://zvon.org/comp/r/tut-Regexp.html

https://opentutorials.org/course/909/5143

 

참고 문헌:

손에 잡히는 정규 표현식 /  벤포터 지음 /  김경수 옮김 / 인사이트

Posted by 백조자리
,