'정규 표현식'에 해당되는 글 3건

  1. 2013.05.06 메타 문자 사용
  2. 2013.02.03 URL 교체하기
  3. 2013.02.03 POSIX 정규 표현식


공백 문자 찾기

정규 표현식 검색을 수행할 때, 눈에 보이지 않지만 텍스트에 포함되는 공백 문자들도 찾아야 할 때가 있다.

예를 들어, 탭 문자를 모두 찾거나 줄바꿈 문자를 찾고 싶을 수도 있다. 꼼수를 이용하지 않고 이런 문자를 정규 표현식에 직접 써넣기가 어렵기 때문에, 아래와 같은 특수한 메타 문자들을 사용할 수 있다.


공백 메타 문자

 메타 문자

설 명 

 [\b]

 백스페이스 

 \f  

 페이지 넘김(form feed) 

 \n 

 줄 바꿈 

 \r 

 캐리지 리턴 

 \t 

 탭 

 \v 

 수직 탭


ex) \r\n\r\n

\r\n은 줄 바꿈과 캐리지 리턴의 조합과 일치한다. 위도우에서 이 조합은 줄의 끝을 나타내는 데 사용한다.

따라서 \r\n\r\n 을 검색하면, 줄 끝이 연속해서 두 번 나오는 부분과 일치하는데, 이때 줄의 끝이 두 번 나온다는 것은 바로 두 레코드 사이에 빈 줄이 있음을 의미한다.



특정한 문자 형태와 일치시키기

문자 집합은 검색에서 쓰는 가장 흔한 형태이기에, 자주 쓰는 문자 집합들은 특수한 메타 문자로 대신하기도 한다. 

이러 테마 문자들을 문자 클래스(classes of characters)라고 부른다. 직접 찾고 싶은 문자들을 열거하거나 범위를 사용하면 되기 때문에, 실제로 클래스 메타 문자를 써야만 하는 경우는 결코 없지만, 사용해 보면 너무나도 유용함을 알게 될 것이다.


다음은 거의 모든 정규 표현식 구현에서 기본으로 지원하는 클래스들이다.


숫자 메타 문자

메타 문자 

설 명 

 \d 

 숫자 하나([0-9])와 같다. 

 \D 

 숫자를 제외한 문자 하나([^0-9]와 같다) 


regex: myArray\[\d\+\]


※ 정규 표현 문법은 대소문자를 구별한다. \d는 숫자 하나와 일치하고, \D는\d와 뜻이 정반대다. 

클래스 메타 문자에서도 소문자와 대문자는 서로 반대임을 뜻한다.



영숫자 문자와 영숫자가 아닌 문자 찾기

자주 사용하는 문자 집합이 또 있다. 영숫자(alphanumeric) 문자로, 대문자와 소문자를 포함한 알파벳 A부터 Z, 숫자, 밑줄을 포함한다.

대개 파일이나 디렉토리 이름, 애플리케이션 변수명, 데이터베이스 객체 이름 등에 사용한다.


영숫자 메타 문자

 메타 문자 

설 명 

 \w 

 대소문자와 밑줄을 포함하는 모든 영숫자([a-zA-Z0-9_]와 같다) 

 \W 

 영수자나, 밑줄이 아닌 모든 문자(^a-zA-Z0-9_]와 같다) 



regex: 


'Programming > RegEx' 카테고리의 다른 글

반복 찾기(+, *) 와 '?' 메타 문자  (0) 2013.05.12
포직스(POSIX) 문자 클래스  (0) 2013.05.12
문자 집합으로 찾기  (0) 2013.05.06
정규 표현식(Regualr Expression)  (0) 2013.05.05
태그 찾기  (0) 2013.02.12
Posted by scii
:

URL 교체하기

Programming/RegEx 2013. 2. 3. 21:53 |

http:로 시작하는 URL을 <a href="URL">URL</a> 로 교체하기


이 작업을 하려면 우선적으로 URL 주소만을 찾는 정규 표현식 패턴을 만드는 것이 첫 번째로 할 일이다.

다음으로, 검색 결과를 백레퍼런스로 사용해서 교체한다. 


원본   


URL을 검색하는 정규 표현식


검색된 URL


URL을 다른 형식으로 바꿔주고 있다.


바뀐 최종적인 URL


'Programming > RegEx' 카테고리의 다른 글

정규 표현식(Regualr Expression)  (0) 2013.05.05
태그 찾기  (0) 2013.02.12
[Python] Regular Expression  (0) 2013.02.07
정규 표현식의 활용(이메일 주소 변경)  (0) 2013.02.03
POSIX 정규 표현식  (0) 2013.02.03
Posted by scii
:

POSIX 표준 정규 표현식에 익순해진 뒤에는 더 많은 기능을 가진 펄(Perl) 확장 정규 표현식인 PCRE(Perl Compatible Regular Expression) 도 배워두면 좋다.

PCRE는 대부분의 언어에서 라이브러리를 제공하므로 확장성도 뛰어나다.


정규 표현식의 메타 문자들

문자 지정 

임의의 문자 하나를 의미

반복 지정 

문자 패턴이 0개 혹은 1개를 나타냄

 

문자 패턴이 1개 이상 반복 

 

문자 패턴이 0개 이상 반복 

 

{ ... } 

(interval) 반복수를 직접 지정할 수 있다. 예를 들어, {3}은 3번 반복, {,7}은 일곱 번 이하 반복, {2,5}은 두 번 이상, 다섯 번 이하  반복

위치 지정 

행의 맨 앞을 의미 

 

행의 맨 끝을 의미 

그룹 지정 

[ ... ] 

대괄호 안에 지정된 문자 중 한 문자를 지정 

 

 [ ^... ]

대괄호 안에 지정된 문자를 제외한 나머지(여집합)를 지정 

기타 

메타 문자를 이스케이프(escape) 한다 

 

OR 연산을 한다(alternation) 

 

( ) 

패턴을 그룹화하거나 백레퍼런스로 작동 

POSIX 표준 정규 표현식은 문자, 반복, 위치, 범위, 기호의 메티 문자로 구성되며, 기본 패턴은 위와 같이 다섯 개 그룹으로 나눌 수 있다.


문자 지정 그룹

메타 문자에서 마침표(.)는 임의의 문자 하나를 의미한다. 영문자나 숫자, 기호 등 어느 것이든 하나의 문자와 일치한다. 따라서 t...k 처럼 작성하면, t와 k사이에 임의의 문자 세 개가 들어있는 단어(think나 thick 등)가 매칭된다.


반복 지정 패턴

반복을 지정하는 메타 문자(?, +, *, {...}) 는 바로 앞에 있는 문자나 패턴의 반복수를 지정한다.


?는 바로 앞의 문자에 대해 0개 혹은 1개와 일치한다. 예를 들어 a?b 라고 하면 ?앞에 있는 a가 있거나 없다는 뜻이된다. 따라서 a?b 는 b 혹은 ab와 매칭된다.

만일 a.?s 가 되면 a 다음에 임의의 문자(.)가 0개 혹은 1개 나오고 그 뒤에 s가 있는 문자(as, abs, ats 등)와 매칭된다.


+는 바로 앞의 문자에 대해 1개 이상과 일치하며, *는 바로 앞의 문자에 대해 0개 이상과 일치한다. 

예를 들어 a+b라고 하면 a가 하나 이상 앞에 나오고, b가 뒤따르는 문자(ab, aab, aaab 등) 와 일치하며, 

a*b 라고 하면 a가 0개 이상 앞에 나오고 b가 뒤따르는 문자(b, ab, aab 등)와 일치한다.


마지막으로 사용자가 임의의 반복수를 지정할 수 있는 메타 문자는 중괄호( { } ) 로 감싸서 표시한다. 중괄호 안에는 최소, 최대 반복수를 지정할 수 있는데, 예를 들어 {2,5}라고 하면 바로 앞의 문자가 최소 2번 이상, 최대 5번 이하 반복된다는 의미이다. 

반복수 중에 앞부분을 생략하여 {,5} 라고 하면 0번 이상, 다섯 번 이하라는 의미이고, 뒷 부분을 생략하여 {2, } 라고 하면 최대 반복에 제한이 없다는 의미이다.

따라서 0개 혹은 1개와 일치하는 ?는 {0,1}로 쓸 수 있고 1개 이상을 의미하는 +는 {1, } 로 쓸 수 있다. 또 0개 이상을 의미하는 *는 {0, }와 같다.


※ a* 같은 표현식을 만날 때,

단독으로 a* 나 [0-9]* 같이 표현식을 작성하는 경우를 종종 보게 되는데, 이는 모든 문자와 알치하므로 잘못된 표현식이라 할 수 있다. 따라서 * 기호 앞에 문자가 하나만 있는 표현식이라면 잘못 작성했다고 판단하면 된다.

이런 경우에는 * 대신 + 를 사용하는 편이 좀 더 정확한 표현식을 작성할 수 있다.


위치 지정 패턴

위치를 지정하는 기호는 ^과 $이다. 일반적으로 ^는 행의 시작을 의미하고, $는 끝을 의미한다. 예를 들어 ^abc 라고 하면 행의 시작 부분에 있는 abc와 일치하고, boy$라고 하면 행의 끝 부분에 있는 boy와 일치한다. 

이를 응용하여 ^$라고 하면, 행의 시작과 끝 사이에 아무것도 없는 행, 즉 비어있는 행과 일치한다.

여기서는 행 단위에 국한되었지만 가끔 ^, $가 특정 스트림의 맨 앞과 맨 끝을 의미하기도 한다. 


그룹 지정 패턴

그룹을 지정하는 패턴은 [...]와 [^...]로 구분할 수 있다. [...]는 괄호 안에 지정된 문자 중 하나와 일치한다는 의미이다.반대로 [^...]는 괄호 안에 지정된 문자를 제외한 나머지 문자와 일치한다는 의미이다. 

예를 들어 [abc]는 a, b, c 중 하나를 의미한다.

여기에 범위를 적용할 수도 있다. [a-z]는 알파벳 소문자(a부터 z까지)를 의미하고, [0-9]는 숫자(0부터 9)를 의미한다. 복합적인 범위를 적용하여 [a-zA-Z0-9] 처럼 알파벳 대소문자와 숫자 중 하나를 지정할 수도 있습니다.

그룹 패턴은 종종 반복 지정 패턴과 함께 나타나기도 한다. 예를 들어 [a-zA-Z]+ 는 하나 이상(+) 의 대소문자 알파벳([a-zA-Z]) 과 일치한다는 의미이다.


이스케이프

이스케이프(escape)는 백슬래쉬(\) 로 표현되며, 메타 문자의 의미를 없애주는 역할을 한다. 반복 지정 패턴인 * 문자 앞에 백슬래쉬를 붙이면 반복의 의미가 사라지고, 그냥 *문자 자체와 일치한다. 이를 '이스케이프' 라고 한다.


얼터네이션

얼터네이션(alternation) 은 | 으로 표현되며 OR 연산을 의미합니다. 얼터네이션은 대부분 중괄호 기호와 함께 사용됩니다. 예를 들어 (a | b)c 라고 하면 a나 b 중 하나로 시작하며 뒤이어 c가 나타나는 문자(ac, bc)와 일치한다.

단 중괄호에는 백레퍼런스(back reference) 의 의미도 있다는 것을 주의해야 한다.


그룹 지정과 백레퍼런스(/)

그룹(grouping) 이나 백레퍼런스(back-reference) 를 지정할 때는 중괄호가 사용된다. 백레퍼런스는 정규 표현식으로 매칭된 결과 값을 저장해두었다가 변수처럼 사용할 수 있는 기능이다. 


문자 클래스

POSIX 정규 표현식에서의 몇몇 문자 그룹 표 (사용자가 그룹 지정 패턴으로 직접 만들 수 있다)

POSIX 표준 정규 표현식의 문자 클래스

 [[:alnum:]]

알파벳과 숫자 

 [[:alpha:]]

알파벳 대소문자 

 [[:blank:]]

 탭(\t)

[[:cntrl:]] 

제어 문자 

[[:digit:]] 

숫자 

[[:xdigit:]] 

16진수(hex)형 숫자, 즉 [0-9a-fA-F] 

 [[:upper:]]

알파벳 대문자 

[[:lower:]] 

알파벳 소문자 

[[:space:]] 

탭(\t), CR(\r), LF(\n) 

[[:print:]] 

출력 가능한 문자 

 [[:graph:]]

공백을 제외한 문자 

[[:punct:]] 

출력 가능한 특수 문자 

이들 중 alnum, alpha, digit, xdigit은 주로 사용된다.



'Programming > RegEx' 카테고리의 다른 글

정규 표현식(Regualr Expression)  (0) 2013.05.05
태그 찾기  (0) 2013.02.12
[Python] Regular Expression  (0) 2013.02.07
URL 교체하기  (0) 2013.02.03
정규 표현식의 활용(이메일 주소 변경)  (0) 2013.02.03
Posted by scii
: