정규식에서 *? 또는 +?의 의미
게시일: 2006/06/29 | 글쓴이: doa | 10274 번 | 프린트 | 메일


사실 정규식은 유닉스에서만 사용할 수 있는 기능이었다. 그러나 펄의 정규식이 보편화되고 정규식의 강력함때문에 여러 프로그램에서 지원되다 보니 이제는 PHP를 포함한 각종 언어에서도 지원하며, EditPlus 와 같은 편집기, Privoxy와 같은 프록시 프로그램에서도 지원하고 있는 실정이다. 정규식에 대한 더 자세한 내용은 펄의 정규식(I, II)을 참조하기 바란다.

사실 정규식은 아주 강력한 기능이지만 숙달되기까지 상당히 힘들며 일반인이 이해하기에는 조금 난해한 부분이 있다. 사실 다른 사람들이 작성한 정규식을 보면 *?+?와 같은 표현을 종종 보게된다. 어떤 의미인지 이해하기 조금 힘들 수 있지만 사실 정규식을 정확히 이해하고 있다면 그리 어렵지 않게 알 수 있는 코드이기도 하다.

문자열이 다음처럼 구성되어 있고, 이중에서 <A> 태그 사이의 제목을 구하는 경우를 예로 생각해 보자.

<a href='http://qaos.com/'>QAOS.com</a><a href='http://qaos.com/'>QAOS.com</a> 

1. /<[^>]*>(.*)</.>/ 2. /<[^>]*>([^<]*)</.>/ 3. /<[^>]*>(.*?)</.>/


두번째와 세번째는 모두 QAOS.com을 출력하지만 첫번째는 QAOS.com</a><a href='http://qaos.com/'>QAOS.com를 출력하게된다. 그 이유는 간단하다.

펄의 정규식(I, II)에서 알 수 있지만 .*는 0개 이상으로 구성되는 개행 문자를 제외한 모든 문자열을 검색한다. 즉 <a href='http://qaos.com/'>까지를 건너뛰고 .*에 해당하는 모든 QAOS.com</a><a href='http://qaos.com/'>QAOS.com를 찾게된다.

즉 .*을 사용하면 원하는 결과와는 다른 결과가 나오므로 보다 정확히 태그내의 문자열을 검색하기위해서는 .* 처럼 모든 문자를 검색하는 것이 아니라 [^<]*처럼 모든 문자 중에서 태그의 시작을 표시하는 <를 제외해야 태그 내의 QAOS.com만 찾을 수 있다.

마지막으로 .*?에서 ?는 0번 또는 한번을 의미한다. 따라서 .*?는 .*을 0번 또는 1번 찾으라는 얘기가 된다. 여기서 0번은 의미가 없으므로 .*?는 첫 번째 매치(최소 문자)를 의미하게 된다. 만약 ?가 없다면 위의 예에서처럼 처음 매치가 일어났을 때의 값이 아니라 두번째 매치가 일어났을 때의 값이 저장된다. 따라서 .*는 광역 매치, .*?는 최소 매치를 의미하게 된다. 그러나 문자열이

<a href='http://qaos.com/'>QAOS.com</a>


로 구성되어 있다면 당연히 3개의 패턴 모두 동일한 값을 매치하게 된다.

댓글: 이 팁은 unzarem님의 질문, 정규표현식에서 *? 또는 +? 의 의미는?에대한 답으로 작성되었습니다.


MS-DOS 하위 시스템 오류 컴퓨터를 사용하다 보면 그림처럼 MS-DOS 하위 시스템 오류가... (6551) 2006-06-29
정품 인증 취소하기 얼마 전 윈도우즈 게시판에 윈도우홈 서비스팩2 포함된 버전 인증... (7979)2006-06-29

QAOS.com에 게시된지 1년 이상된 자료와 관리자가 공개한 자료는 누구나 제한없이 읽을 수 있습니다.
그러나 QAOS.com의 자료를 퍼가는 것은 금지하고 있습니다.

이 정보가 유용하다고 생각되시면 QAOS.com과 많은 다른 사람들을 위해 퍼가기 보다는 링크로 알려주시기 바랍니다.

세상사는 이야기

  • 찾아라! 아이폰 순정용 >
  • 만원대 피젯 스피너를 >
  • 망하는 길을 택한 쿠팡 >
  • 물놀이에 적당한 가성 >
  • 컴퓨터를 IPTV로 2, po >
  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2017 QAOS.com All rights reserved.