Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

정규표현식/스터디/반복찾기: Difference between revisions

From ZeroWiki
imported>zeldababo
No edit summary
(Table transclusion repair v1)
 
(5 intermediate revisions by 2 users not shown)
Line 10: Line 10:
** RGB 값은  
** RGB 값은  
  #99FFAA
  #99FFAA
처럼 [[:xdigit:]]가 정확하게 6번 나와야 한다.
처럼 [:xdigit:]가 정확하게 6번 나와야 한다.
=== 정확한 반복 횟수 ===
=== 정확한 반복 횟수 ===
* RGB
* RGB
** 기존 :  
** 기존 :  
  #[:xdigit:][:xdigit:][:xdigit:][:xdigit:][:xdigit:][:xdigit:]
  #[:xdigit:][:xdigit:][:xdigit:][:xdigit:][:xdigit:][:xdigit:]
** 개선 :  
** 개선 :  
  #[:xdigit:]{6
  #[:xdigit:]{6
}
}
=== 반복 횟수 범위 설정 ===
=== 반복 횟수 범위 설정 ===
* 날짜양식 :  
* 날짜양식 :  
  \d{1,2}[-\/]\d{1,2}[-\/]\d{2,4
  \d{1,2}[-\/]\d{1,2}[-\/]\d{2,4
}
}
** 하지만 날짜가 54/67/9999같은 날짜도 통과 시킨다.
** 하지만 날짜가 54/67/9999같은 날짜도 통과 시킨다.
Line 42: Line 42:
  \d+: \$\d{2,}\.\d{2
  \d+: \$\d{2,}\.\d{2
}
}
{{|
1001: $496.80
1001: $496.80
1002: $1290.69
1002: $1290.69
Line 50: Line 49:
1006: $414.90
1006: $414.90
1007: $25.00
1007: $25.00
|}}
* 결과
* 결과
  1001: $496.80
  1001: $496.80
Line 66: Line 64:
* 검색문
* 검색문


  <[Bb]>.*[/Bb]>
  <[Bb]>.*[/Bb]>


  이경우 검색되는 범위는 <B> AK</B>, <B>HI</B>, <B> AK</B> and <B>HI</B> 세개가 일치되고 이것은 과하게 일치했다고 할수 있을것이다. 그럼 이렇게 중복되는것을 어떻게 방지할수 있을까? 위에서 말한 물음표(?)를 쓰면된다.
  이경우 검색되는 범위는 <B> AK</B>, <B>HI</B>, <B> AK</B> and <B>HI</B> 세개가 일치되고 이것은 과하게 일치했다고 할수 있을것이다. 그럼 이렇게 중복되는것을 어떻게 방지할수 있을까? 위에서 말한 물음표(?)를 쓰면된다.
Line 80: Line 78:
| +
| +
| +?
| +?
|-
| {n,}
| {n,}?
|}
|}
||{n,}||{n,}?||;


게으른 수량자란?? 한번 걸쳐진 범위는 제외하고 검색해준다. 그러므로 이걸 사용하면 과하게 일치하는 상황을 방지할수 있다.
게으른 수량자란?? 한번 걸쳐진 범위는 제외하고 검색해준다. 그러므로 이걸 사용하면 과하게 일치하는 상황을 방지할수 있다.
Line 91: Line 91:
* 정규 표현식
* 정규 표현식
   
   
  &lt;[Bb]&gt;.*[/Bb]&gt;
  &lt;&#91;Bb&#93;&gt;.*&#91;/Bb&#93;&gt;




Line 98: Line 98:
== 정리해보자 - 준석 ==
== 정리해보자 - 준석 ==


이제 슬슬 정규표현식의 진짜 의미가 들어난다. 정규 표현 패턴을 사용하여 반복찾기를 하면 이제 까지 배워온 것을 이용해 구간으로 정확하게 원하는 문자를 찾아낼수 있을것이다.
이장에서는
{| class="wikitable"
|-
| 문자
| 의미
|-
| +
| 하나 이상 일치
|-
| *
| 없거나 하나 이상 있는경우 일치
|-
| ?
| 없거나 하나인 경우 일치(붙여서 쓴다)
|-
| {n,n}
| n개부터 n개 까지 범위지정
|}
다음을 이용한다면 반복찾기 정규표현식은 중복도 방지할수있는 강력한 도구로 만들수 있을것이다

Latest revision as of 12:46, 27 March 2026

[[pagelist(^정규표현식/*)]]

몇 번 일치하는가 - 상호

구간 지정하기 - 승한

  • 구간은 중괄호로 표시한다. ({})
  • 필요성
    • +, *는 일치하는 문자수 제한이 없다. 최 몇개까지 일치하는지 정할 수 없다
    • +, *, ?가 일치하는 수의 최솟값은 0이나 1이다. 문자수의 최솟값을 명시적으로 정의 불가능.
    • 정확히 원하는 만큼만 일치하도록 문자수 못 정함
    • RGB 값은
#99FFAA

처럼 [:xdigit:]가 정확하게 6번 나와야 한다.

정확한 반복 횟수

  • RGB
    • 기존 :
#[:xdigit:][:xdigit:][:xdigit:][:xdigit:][:xdigit:][:xdigit:]
    • 개선 :
#[:xdigit:]{6

}

반복 횟수 범위 설정

  • 날짜양식 :
\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4

}

    • 하지만 날짜가 54/67/9999같은 날짜도 통과 시킨다.
    • 구간은 {0, 4} 처럼 0부터 시작할 수 있다.
(O) 4/8/03
(O) 10-6-2004
(X) 2/2/2
(O) 01-01-01

최소 반복 횟수 찾기

  • 주문이 100불 이상인 것 찾기 :
\d+: \$\d{2,}\.\d{2

} 1001: $496.80 1002: $1290.69 1003: $26.43 1004: $613.42 1005: $7.61 1006: $414.90 1007: $25.00

  • 결과
1001: $496.80
1002: $1290.69
1004: $613.42
1006: $414.90

과하게 일치하는 상황 방지하기 - 준석

물음표(?)는 제한된 범위만큼 일치시키고(없거나 하나만 있는 경우 일치한다), 구간을 쓰면 정확히 지정한 만큼 일치하거나 지정한 범위 안에서만 검색을 수행한다.


  • 예문
 AK and HI
  • 검색문
<[Bb]>.*[/Bb]>
이경우 검색되는 범위는  AK, HI,  AK and HI 세개가 일치되고 이것은 과하게 일치했다고 할수 있을것이다. 그럼 이렇게 중복되는것을 어떻게 방지할수 있을까? 위에서 말한 물음표(?)를 쓰면된다.
기본 수량자 게으른 수량자
* *?
+ +?
{n,} {n,}?

게으른 수량자란?? 한번 걸쳐진 범위는 제외하고 검색해준다. 그러므로 이걸 사용하면 과하게 일치하는 상황을 방지할수 있다.

  • 예문
 AK and HI
  • 정규 표현식
<[Bb]>.*[/Bb]>


이렇게 검색해야  AK, HI만을 검색해준다.

정리해보자 - 준석

이제 슬슬 정규표현식의 진짜 의미가 들어난다. 정규 표현 패턴을 사용하여 반복찾기를 하면 이제 까지 배워온 것을 이용해 구간으로 정확하게 원하는 문자를 찾아낼수 있을것이다.

이장에서는

문자 의미
+ 하나 이상 일치
* 없거나 하나 이상 있는경우 일치
? 없거나 하나인 경우 일치(붙여서 쓴다)
{n,n} n개부터 n개 까지 범위지정

다음을 이용한다면 반복찾기 정규표현식은 중복도 방지할수있는 강력한 도구로 만들수 있을것이다