본문 바로가기

개발

정규 표현식(regular expression) 구성 요소

반응형

출처 - WRITING SECURE CODE (안전한 코드 작성 기술)

  • ^
    • 문자열의 시작에서 일치하는지 검사한다.
  • $
    • 문자열의 종료에서 일치하는 검사한다.
  • *
    • {0,}과 동일하며, 앞 패턴과 0번 혹은 그 이상 일치하는지 검사한다.
  • +
    • {1,}과 동일하며, 앞 패턴과 1번 혹은 그 이상 일치하는지 검사한다.
  • ?
    • {0, 1}과 동일하며, 앞 패턴과 0번 혹은 1번 일치하는지 검사한다.
  • {n}
    • 앞 패턴이 정확히 n번인지를 검사한다.
  • {n,}
    • 앞 패턴이 n번 혹은 그 이상인지를 검사한다.
  • {,m}
    • 앞 패턴이 m번 이하인지를 검사한다.
  • {n,m}
    • 앞 패턴이 n번에서 m번인지를 검사한다.
  • .
    • \n 문자를 제외한 한 문자가 일치하는지 검사한다.
  • (pattern)
    • 패턴(pattern)과 일치하는지 검사하여 그 결과 데이터를 변수에 저장한다. 결과를 저장하는 변수는 프로그래밍 언어에 따라 다르다. 패턴 그룹, 예를 들면, (xx)+는 괄호내의 패턴이 1번 이상 있는지를 검사한다. 만약 비-저장을 원하면 (?:xx)로 적어 주면 일반식 엔진은 데이터를 저장하지 않는다.
  • aa|bb
    • aa 혹은 b와 일치하는지 검사한다.
  • [abc]
    • 사각 괄호내에 표시된 문자 중 한 문자(a, b, c)라도 일치하는지 검사한다.
  • [^abc]
    • 사각 괄호내에 표시된 문자 중 모든 문자(a, b, c)가 없는지 검사한다.
  • [a-z]
    • a부터 z까지 범주에 있ㄴ느 문자가 포함되어 있는지 검색한다.
  • \
    • 이스케이프 문자. \n과 \/은 특수 문자이고, \1과 같이 \d로 표시되면 앞에서 찾은 데이터를 참조하는 데 사용된다.
  • \b
    • 단어와 스페이스간의 위치가 일치하는지 검사한다. 예를 들면 "er\b"는 "never"에서는 "er"이 일치한다고 찾지만, "verb"에서는 일치하지 않는다고 리턴한다.
  • \B
    • 해당 위치에서 단어를 끊어낸다. 예를 들면, "ea*r\B"는 "never early"에서 "ear"를 찾는다.
  • \d
    • [0-9]와 같으며 숫자가 있는지 검사한다.
  • \D
    • [^0-9]와 같으며 숫자가 없는지 검사한다.
  • \n, \r, \f, \t, \v
    • 새로운 라인, 라인 피드, 폼 피드, 탭과 수직 탭과 같은 포맷팅 문자가 있는지 검사한다.
  • \p{category}
    • 유니코드 카테고리를 검사한다.
    • 유니코드 일반식을 \p{카테고리}라고 하면 모든 의미있는 유니코드 문자 카테고리에 있는 모든 문자를 찾는다. .NET 프레임워크와 펄 5.8.0은 유니코드 카테고리를 지원하여 전세계 모든 문자를 더 쉽게 처리할 수 있다. 유니코드 카테고리는 문자(L), 마크(M), 숫자(N), 구두점(P), 심볼(S), 구분자(Z)와 그 밖의 문자(O와 C)를 포함한다.
    • L (모든 문자)
      • Lu (대문자)
      • Ll (소문자)
      • Lm (수식어, 문자와 유사한 심볼)
      • Lo (히브리어, 아라비아어, 티벳어와 같은 대/소문자의 구분이 없는 문자들)
    • M (모든 마크)
      • Mn (엑센트 기호나 움라우트와 같은 문자위에 표현되는 마크)
      • Me (원과 같이 다른 문자를 둘러싸는 마크)
    • N (모든 숫자)
      • Nd (10진수, 0부터 9까지의 숫자)
      • Nl (숫자, 로마 숫자는 U+2160부터 U+2182이다)
      • No (분수, 위에 적은 문자(superscript), 아래에 적은 문자(subscript)와 같은 문자)
    • P (구두점)
      • Pc (밑줄과 같이 다른 글자들을 연결하는 연결 문자)
      • Pd (대쉬, 모든 대쉬와 하이픈 문자)
      • Ps ( {, (과 [ 같은 괄호를 여는 문자)
      • Pe ( }, )과 [ 같은 괄호를 닫는 문자)
      • Pi ('. <<과 " 같은 인용문의 시작 문자)
      • Pf ('. >>과 " 같은 인용문의 끝 문자)
      • Po (?, !과 같은 그 밖의 문자)
    • S (모든 심볼)
      • Sm (수학 부호)
      • Sc (화폐 기호)
      • Sk (그레이브 심볼이나 둥근 악센트 기호와 같은 심볼)
      • So (섭씨 온도 기호와 상자 그리기 심볼과 같은 그 외의 심볼)
    • Z (구분자)
      • Zs (스페이스와 같은 구분자)
      • Zl (U+2028(라인 구분자), U+00A6(수직 바, |)를 기호(Symbol)로 처리)
      • Zp (U+2029(단락 구분자))
    • O (그 밖의 문자)
      • Cc (캐리지 리턴, 라인 피드, 벨과 같은 컨트롤 문자)
      • Cf (포맷 문자)
      • Co (상호, 로고와 같은 문자)
      • Cn (할당되지 않은 문자)
      • Cs (상위 대리 문자와 하위 대리 문자)
    • 이 밖에 더 많은 카테고리는 구글 검색을 하자.
  • \s
    • [ \f\n\r\t\v]와 동일하며 스페이스 문자가 있는지 검사한다.
  • \S
    • [^ \f\n\r\t\v]와 동일하며 스페이스 문자가 없는지 검사한다.
  • \w
    • [a-zA-Z0-9_]와 동일하며 밑줄까지 포함한 문자와 숫자를 검사한다.
  • \W
    • [^a-zA-Z0-9_]와 동일하며 밑줄까지 포함한 문자와 숫자가 없는지 검사한다.
  • \xnn 혹은 \x{nn}
    • 두 자리 16진수 nn과 동일 값인지를 검사한다. 예를 들어, \x41은 "A"를 찾고, "\x041"은 "\x04"와 "1"을 찾는다.
  • \unnnn 혹인 \x{nnnn}
    • 네 자리 유니코드 16진수 nnnn과 동일 값인지를 검사한다.

사용 예제

  • [a-fA-F0-9]+
    • 하나 혹은 그 이상의 16진수인 경우
  • <(.*)>.*<\/\1>
    • HTML 태그인 경우. 시작 태크는 (.*)로 저장되고, \1은 종료 태크를 검사하는데 사용된다. 만약 (.*)이 폼이면, \1도 폼이다.
  • \d{5}(-\d{4})?
    • U.S. 우편 번호(ZIP Code)
  • ^\w{1,32}(?:\.\w{0,4})?$
    • 1부터 32 길이의 문자. 다음은 선택적인 점(period)과 0부터 4 길이의 학장자인 파일명인지를 검사한다. 괄호내의 점과 확장자는 ?:이 사용되므로 저장되지는 않는다.
반응형