A2공간 - 도움되는 글을 쓰자

ani2life.egloos.com

포토로그 마이가든


그냥 잡담

※방명록은 따로 없고 무조건 최신글에 댓글 남기시면 됩니다. ^^

위드블로그



정규표현식 - 매칭 범위를 최소한으로 잡아보자 개발/플밍



[ 상황1 ]
문자열: "#aaa# xxx"

위와 같은 문자열이 있고 #으로 시작해서 #으로 끝나는 문자열을 추출하고 싶을 경우 아래와 같이 할 수 있습니다.

표현식: /#.+#/
매칭결과: "#aaa#"



[ 상황2 ]
문자열: "#aaa# #bbb# xxx"

이번에는 위와 같은 문자열 입니다.
원하는 결과는 "#aaa#", "#bbb#" 입니다.

그런데 상황1의 표현식을 쓰면 아래와 같은 결과가 나오게 됩니다.

표현식: /#.+#/
매칭결과: "#aaa# #bbb#"



[ 상황2의 이유 ]
정규표현식에서 +, *, ? 들은 욕심쟁이 입니다.
그래서 가능한 최대 범위로 매칭합니다.

최대 범위 매칭을 풀이하자면 상황2에서 경우의 수를 따져보면 아래와 같은 매칭들이 가능합니다.
"#aaa#", "#bbb#", "#aaa# #", "# #bbb#", "#aaa# #bbb#"

이중에서 가장 큰 범위의 "#aaa# #bbb#"가 선정되는 것이죠.



[ 상황2의 해결방법 ]
정규표현식에서 +, *, ? 들의 욕심을 최소화 시킬 수 있습니다.
아래와 같이 바꿔서 사용하면 됩니다.

+ 대신 +?
* 대신 *?
? 대신 ??



[ 상황2에 해결방법을 적용 ]
문자열: "#aaa# #bbb# xxx"
표현식: /#.+?#/
매칭결과: "#aaa#", "#bbb#"

이제 최소 범위로 매칭이 됩니다.



[ PHP 정규표현식에서 가능한 다른 해결방법 ]
PHP 정규표현식의 U 수정자를 이용하는 방법도 있습니다.

문자열: "#aaa# #bbb# xxx"
표현식: /#.+#/U
매칭결과: "#aaa#", "#bbb#"

PHP 정규표현식에서 U 수정자를 사용하면 표현식에 사용되는 모든 +, *, ? 이 모두 +?, *?, ?? 와 같이 동작합니다.



참고문서: http://www.skdevelopment.com/php-regular-expressions.php

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://ani2life.egloos.com/tb/3880463 [도움말]

덧글

  • 명이 2008/08/27 12:01 # 삭제 답글

    별나라 언어로 보이는 1인..@_@

    맛있는 점심 드셔용~^*^
  • -A2- 2008/08/27 13:18 #

    외계인과 통신중입니다. ㅋ
  • 자그니 2008/08/27 13:13 # 답글

    한국말로 써주세요...(응?)
  • -A2- 2008/08/27 13:18 #

    마음으로 읽어주세요. ^^
  • 키아 2008/08/27 16:29 # 삭제 답글

    빙글~뱅글~
  • -A2- 2008/08/27 22:40 #

    세상은 요지경~
  • 정태영 2008/08/27 17:44 # 삭제 답글

    명확하게 하려면 #[^#]+# 식으로 사용하는 것이 더 좋지 않을까요? :)
  • -A2- 2008/08/27 22:51 #

    네, 위와 같은 한가지 상황에서는 #[^#]+#도 문제없이 동작합니다.
    그런데 #x!aa!z!bb!y# #x!cc!x!dd!y# !xxx!와 같은 ##사이의 !!사이를 가져오는 한가지 이상의 복잡하게 중첩된 상황에서 유용합니다.
    최근 이런 중첩된 상황을 겪었거든요. ^^
  • 퓨이 2008/08/28 01:44 # 삭제 답글

    신기해라 신기해라~~~ +_+
    오늘은 배가 안고파졌어요- 다행이에요 ^ㅇ^ ㅋㅋㅋ
  • -A2- 2008/08/28 08:22 #

    다이어트 하시는 분들을 위해 식욕 억제 포스팅을 했어요. ㅋ
  • phice 2008/09/02 11:46 # 답글

    저는 컴맹이라 역시 이런 글 봐도 강건너 불구경 와하하하
    #^!$.+# 는 말도 안되는 거였겠죠 당연히? 우와 역시 너무 어렵습니다 정규식은.
  • fancyydk 2008/11/20 13:38 # 삭제 답글

    정규식은 항상 외우기 힘들고 귀찮아서 쓸때마다 책과 인터넷을 뒤져야 한다는 ㅠㅠ
    위와 같은 상황에는 A2님의 블로그를 오면 되겠군요? ^^
댓글 입력 영역

올블로그 올블릿