'Programming/정규표현식'에 해당되는 글 2건

위치 지정

  - ^ : 맨 처음을 지정.

  - $ : 맨 끝을 지정.

    * 예시
      ~ who is who
         ^who면 앞에 who, who$면 뒤에 who가 선택됨.

      ~ $12$\-\$25$
         ^$면 아무것도 선택되지 않음. \$면 $ 모두가 선택됨. ^\$는 맨 앞의 $만 선택됨. \$$는 맨 뒤의 $만 선택됨. \\는 \모두가 선택됨.

 

  - . : 모든 문자선택. *와 비슷함.
    * 예시
      ~ Regular expressions are powerful!!!
         .은 모두 첫글자 R을 시작으로 모두 선택됨. ......는 Regula를 시작으로 6글자로 쪼개서 선택됨(Regular Explressions are powerf).

      ~ O.K.
        .은 모든 글자가 선택됨. \.은 모든 .이 선택됨. \..\.은 .K.만 선택됨.

 

범위 지정

  - [] : 범위를 지정할때 사용.
    * 예시
      ~ How do you do?
         [oyu]는 문장에 포함된 모든 o, y, u가 선택됨. [dH].은 H와 d와 그 뒤의 한글자만 선택됨. [owy][yow]는 owy중 하나, yow 중 하나가 결합된 글자가 선택됨.

      ~ ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz 0123456789
[C-K]는 C부터 K까지 선택됨. [CDEFGHIJK] C부터 K까지 선택됨. [a-d]는 a부터 d까지 선택됨.[2-6]은 2에서 6까지 선택됨. [C-Ka-d2-6]은 C-K, a-d, 2-6까지 선택됨.

[^CDghi45]는 CD,ghi,45를 제외하고 나머지가 선택됨(^는 부정). [^W-Z]는 W-Z를 제외하고 나머지가 선택됨.

 

  -  | : or와 같습니다.
    * 예시
      ~ MondayTuesdayFriday
        (on|ues|rida)는 on,ues,rida만 선택됨. (Mon|Tues|Fri)day는 모두 선택됨. ..(id|esd|nd)ay는 모두 선택됨(..으로 id,esd,nd앞에 두글자를 선택하고 뒤에 ay까지 선택함).

 

수량자
  - * : *앞에 등장하는 글자가 0개 이상 있는 것을 선택.
    * 예시
      ~ aabc abc bc
          a*b는 aab, ab, b가 선택됨(b앞에 a가 두개 있고, 하나있고 없는 b가 선택되기 때문)
    * 예시
      ~ -@***--"*"--***-@-
        .*는 모두 선택됨. -A*-는 "*"을 감싸는 --만 선택됨. [-@]*는 -@-와 "*"을 감싸는 --만 선택됨.

 

  - + : +앞에 등장하는 글자가 1개 이상 있는 것들을 선택
    * 예시
      ~ aabc abc bc
a+b는 aab, ab가 선택됨(b앞에 a가 두개 있고, 하나있는 b가 선택되기 때문)
    * 예시
      ~ -@@@-***--"*"--***-@@@-
         \*+는 *만 선택됨. -@+--는 -@@@-만 선택됨. [^ ]+는 모두 선택됨(^ 대괄호로 가면 부정으로 됨).

 

  - ? : ? 앞에 등장하는 글자가 하나이거나 없는것만 선택
    * 예시

      ~ aabc abc bc
         a+b는 ab, ab, b가 선택됨(b앞에 a가 두개 있지만 하나만 선택되고, 하나있는 a와 a가 없는 상태로 선택되기 때문)
    * 예시
      ~ --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-
         -X?XX?X는 -XX만 선택됨. -@?@?@-는 맨 앞에 -와 -@-, -@@-, -@@@-, -

@@만 선택됨.

 

  - {} : 수량 계산
    * 예시
      ~ One Ring to bring them all and in the darkness bind them
         .{5}는 5글자씩 선택하기 때문에 뒤에 m을 제외하고 모두 선택함. [els]{1,3}은 e,l,s가 하나이상 3개 이하인 경우만 선택됨. [a-z]{3,}는 a-z로 시작하는 3글자 이상만 선택됨. r.*는 r뒤의 모든 글자가 선택됨. r.*?는 r만 선택됨. r.+는 r뒤의 모든 글자를 선택함. r.+?는 r뒤의 한글자까지만 선택됨. r.?는 r뒤에 한글자까지만 선택됨. r.??은 r만 선택됨.

 

참고 : *는 {0,}, +는 {1,}, ?는 {1,0}과 같다. * 뒤에 ?가 쓰이면 0개로 의미가 바뀜. +뒤에 ?가 쓰이면 1개로 의미가 바뀜. ?뒤에 ?가 쓰이면 0개로 의미가 바뀜.

 

경계
  - \w : word(문자)라는 의미로 알파벳과 __을 선택
    * 예시
      ~ A1 B2 c3 d__4 e:5 ffGG77--__--
         \w는 :, --를 제외하고 모두 선택됨. \w*는 :,--를 제외하고 모두 선택됨. [a-z]\w*는 a~z까지의 문자와 뒤에 문자가 올수도 안올수 있기 때문에 c3, d__4, e, ffGG77만 선택됨. \w{5}는 문자 5개만 선택되므로 ffGG7만 선택됨. [A-z0-9__]는 A1, B2, c3, d__4, e, 5, ffGG77, __만 선택됨.

 

  -  \W : \w와 반대
    * 예시

      ~ AS __34:AS11.23 @#$%12^*
         \W는 문자가 아닌 특수 문자들만 선택됨. \w는 문자만 선택됨. [^A-z0-9__]는 ^를 제외한 특수문자만 선택됨.

 

  - \d : degit의 약자. 0~9까지만 선택
    * 예시
      ~ Page 123; published: 1234 id=12#24@112
         \d는 숫자만 선택됨. [0-9]도 숫자만 선택됨.

 

  -  \D : \d의 반대
    * 예시
      ~ Page 123; published: 1234 id=12#24@112
         \D는 숫자 외의 나머지만 선택됨.

 

  -  \b : 단어 식별용
    * 예시
      ~ Ere iron was found or tree was hewn, When young was mountain under moon;
      ~ Ere ring was made, or wrought was woe, It walked the forests long ago.
         \b\w는 각 단어의 첫글자만 선택됨. \w\b는 각 단어의 마지막 글자만 선택됨.

    * 예시
      ~ cat concat
         \b\cat는 앞의 cat만 선택됨. cat\b는 앞과 뒤의 cat이 모두 선택됨.

 

  -  \B : \b의 반대
    * 예시
      ~ cat concat
         \B.은 앞의 c를 제외한 글자만 선택됨.

 

  - \A : 첫 글자를 선택함. \A는 멀티라인 설정을 해도 첫 문장의 첫 글자를 선택하지만 ^는 멀티라인 설정 해놓으면 모든 줄의 첫글자를 선택함.

  -  \Z : 마지막 글자를 선택함. \Z는 멀티라인 설정을 해도 마지막 문장의 마지막 글자를 선택하지만 ^는 멀티라인 설정 해놓으면 모든 줄의 마지막 글자를 선택함.

참고 (?=pattern) : pattern을 제외한 나머지 선택. 

    * 예시
      ~ AAAX---aaax---111
         \w+(?=X)는 X가 포함된 문자 중 X를 제외한 문자를 선택하기 때문에 AAA만 선택됨. \w+는 모든 문자가 선택됨. \w+(?=\w)는 AAA, aaa, 111만 선택됨.

 

 

 

 

참고 : http://zvon.org/comp/r/tut-Regexp.html#Pages~Contents

'Programming > 정규표현식' 카테고리의 다른 글

정규표현식  (0) 2017.12.22
블로그 이미지

꼴통보안인

,

정규표현식은 문자열에서 특정한 문자를 찾아내는 도구로써, 수십줄이 필요한 작업을 한줄로 끝낼 수 있다.

  - 정규표현식 생성 : 컴파일, 실행 두단계로 이뤄진다.

    * 컴파일 : 검출하고자 하는 패턴을 만드는일. 보통 리터럴과 객체생성자로 생성한다.
    * 정규표현식 리터럴

      예시

        ~ var pattern = /a/;

    * 정규표현식 객체 생성자

      예시

        ~ var pattern = new RegExp('a');

 

  - 정규표현식 메소드 실행

    * RegExp.exec() : 정규표현식에 해당하는 결과가 있으면 결과값 출력하고, 없으면 null을 return한다.
     예시
        ~ console.log(pattern.exec('abcdef'));  // 결과 : ["a"]
        ~ console.log(pattern.exec('bcdefg'));  // 결과 : null

 


    * RegExp.test() : 정규표현식에 해당하는 결과가 있으면 true를, 없으면 false를 return한다.
      예시
        ~ console.log(pattern.test('abcdef'));  // 결과 : true
        ~ console.log(pattern.test('bcdefg'));  // 결과 : false

 

 

  - 문자열 메소드 실행

    * String.match() : RegExp.exec()와 비슷

       예시

        ~ console.log('abcdef'.match(pattern));  // 결과 : ["a"]
        ~ console.log('bcdefg'.match(pattern));  // 결과 : null

 

 


    * String.replace() :  패턴으로 검색해서 변경한 후 변경된 값을 리턴
       예시

        ~ console.log('abcdef'.replace(pattern,'A'));  // 결과 : Abcdef

 

 

  - 옵션

    * i : i를 붙이면 대소문자를 구분하지 않는다.

      예시

        ~ var xi = /a/;
           console.log("Abcde".match(xi));  // 결과 : null
        ~ var oi = /a/i;
           console.log("Abcde".match(oi));  // 결과 : ["A"]

 

 

    * g : g를 붙이면 검색된 모든 결과를 리턴

      예시

        ~ var xg = /a/;
           console.log("abcdea".match(xg));  // 결과 : ["a"]

        ~ var og = /a/g
           console.log("abcdea".match(og));  // 결과 : ["a", "a"]

 

 

  - 캡처 : 괄호안의 패턴은 마치 변수처럼 재사용할 수 있다. 이때 $기호를 사용한다.

    예시

      * var pattern = /(\w+)\s(\w+)/;
        var str = "coding everybody";
        var result = str.replace(pattern, "$2, $1");
        console.log(result);  // 결과 : everybody, console

 

 

pattern에서 /(\w+)\s(\w+)/;를 이용해서 패턴을 작성했다. 앞 뒤로 단어가 있는 패턴을 찾는 정규표현식이다. 그리고 str 변수에 coding everybody 문장을 넣고 result 변수에 replace 함수를 이용하여 coding을 $1, everybody가 $2인 coding everybody 문장의 단어 순서를 바꾸고 ,를 넣었다. 바꿔서 출력한 결과 everybody, coding이 출력되었다.

 

  - 치환 : 패턴을 이용하여 변수 내용을 바꾼다.

    예시

      * var urlPattern = /\b(?:https?):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*/gim;
        var content = '네이버 : https://www.naver.com 입니다. 다음 :

        https://www.daum.net 입니다. ';
        var result = content.replace(urlPattern, function(url){
            return '<a href="'+url+'">'+url+'</a>';
        });
        console.log(result);

 

urlPattern 변수에 url을 찾는 정규표현식을 넣었다. 그리고 content에 네이버와 다음을 알려주는 url을 넣었다. 마지막으로 result에 replace 함수를 이용하여 url들(https//www.naver.com, https://www.daum.net)를 찾아서 기존 url에 <a href="url">url</a>을 추가하여 리턴한다. 그러므로 result 변수에 네이버 : <a href="https://www.naver.com">https://www.naver.com</a> 입니다. 다음 : <a href="https://www.daum.net">https://www.daum.net</a> 입니다. 가 저장되어 출력된다.

'Programming > 정규표현식' 카테고리의 다른 글

정규표현식 패턴들  (0) 2017.12.22
블로그 이미지

꼴통보안인

,