POSIX 정규식 구문 및 예제

정규식(종종 간단히 "regex"라고 함)은 이전 섹션에서 설명한 와일드카드 문자를 사용하는 표현식보다 훨씬 더 복잡할 수 있습니다. 와일드카드와 달리 정규식은 지정하는 패턴이 단어에서 표시되는 위치와 상관없이 해당 패턴을 포함하는 문자 시퀀스와 일치해야 합니다. 이 섹션의 뒷 부분에 설명된 대로, 앵커 기호 '^'(단어 시작) 및 '$'(단어 끝)를 사용하여 단어에서 정규식이 일치할 위치를 제한하거나 두 앵커 기호를 모두 지정하여 전체 단어와 일치하도록 제한할 수 있습니다.

정규식은 종종 metacharacters라고 하는 다양한 문자에 특수 의미를 지정합니다.

  • 마침표, 점 또는 종지부(.) - 줄 바꿈 문자를 제외하고 표현식에서 모든 단일 너비 ASCII 문자와 일치합니다. 단일 마침표가 있는 다중 바이트 문자와 일치하려면 Perl 호환 가능 정규식 구문에 설명된 대로 Perl 호환 가능 정규식을 사용해야 합니다.

    정규식 지원은 용어를 중심으로 하므로, '.'은 기본적으로 단어 구분 문자인 공백이나 탭고 일치하지 않습니다. 예를 들어, 'f.rm' 정규식은 'f' 뒤에 다른 문자가 온 다음 'rm'이라는 문자가 오는 일련의 문자를 포함하는 모든 단어인 'farmer', 'firmament' 및 'conform'을 포함하여 'farm', 'firm' 및 'form'과 같은 문자 시퀀스를 포함하는 모든 단어와 일치합니다.

    팁: '.' 기호는 와일드카드 표현식의 '?' 문자에 해당합니다. '.*' 시퀀스는 와일드카드 표현식의 '*'에 해당합니다.
  • 별표 또는 별모양(*) - 이전 토큰과 0번 이상 일치합니다. 예를 들어, 'to*' 정규식은 't'라는 문자와 'it', 'to' 및 'too'와 같은 문자열을 포함하는 단어와 일치합니다. 왜냐하면 이전 토큰은 단일 문자 'o'이며 일치하는 표현식에서 0번 표시될 수 있기 때문입니다. 'f[aio]*t'라는 정규식은 이전 토큰이 임의 'a', 'i' 또는 'o'로 구성된 문자 클래스이므로 'fat', 'fit', 'fait', 'fiat' 및 'foot'이라는 단어와 일치합니다.
  • 더하기 부호(+) - 이전 토큰과 1번 이상 일치합니다. 이전 글머리 기호에서 제공된 예와 반대로, 'to+'라는 정규식은 이전 토큰이 단일 문자 'o'이고 일치하는 표현식에서 이 문자가 한 번 이상 표시되어야 하므로 'to' 및 'too' 문자 시퀀스를 포함하는 단어와만 일치합니다. 'f[aio]+t'라는 정규식은 이전 토큰이 'a', 'i' 또는 'o'로 구성된 문자 클래스이고 정규식과 일치하려면 해당 문자 세트의 단어가 하나 이상 있어야 하므로, 'fit', 'fat', 'fait', 'fiat' 및 'foot' 문자 시퀀스를 포함하는 단어와 일치합니다.
  • 물음표(?) - 이전 문자를 선택사항으로 식별합니다. 예를 들어 'too?'라는 정규식은 'to' 및 'too'의 문자 시퀀스를 포함하는 단어와 일치합니다.
  • 세로 막대 또는 파이프(|) - 토큰을 분리하며, 논리 OR문과 매우 비슷하게 이 중 하나는 일치해야 합니다. 예를 들어, 'fa|i|ot'라는 정규식은 'fa', 'i' 또는 'ot' 중 하나 또는 'f 및 (a 또는 i 또는 o) 및 t' 시퀀스로 볼 수 있으므로 'fa', 'i', 'fat' 또는 'fit' 문자 시퀀스를 포함하는 단어와 일치합니다. '|'가 적용되는 토큰을 명확하게 하기 위해 '|' 기호를 사용하는 정규식의 일부는 종종 소괄호로 묶습니다(예는 다음 글머리 기호 참조).
  • 열기 또는 닫기 괄호('(' 및 ')') - 참조 내용을 분명히 하거나 단순화하기 위해 여러 토큰을 함께 그룹화합니다. 예를 들어 'f(a|i|o)t'라는 정규식은 일치하는 시퀀스가 이제 세 개의 문자로 구성되어야 하며 중간 문자는 'a, i 또는 o'라는 문자 중 하나로 제한되었으므로 'fat' 또는 'fit'라는 문자 시퀀스는 포함하지만 'fa'라는 단어는 포함하지 않는 단어와 일치합니다.
  • 열기 대괄호([) 및 닫기 대괄호(]) - 일치시킬 특정 문자 또는 문자 범위를 묶습니다. 대괄호로 묶은 문자는 문자 클래스라고 합니다. 예를 들어, 'f[io]rm'이라는 정규식은 'firm' 및 'form' 문자 시퀀스를 포함하는 단어와 일치하지만 'f'로 시작하고 'rm'으로 종료되는 기타 시퀀스를 포함하는 다른 단어와는 일치하지 않습니다. 정규식에서 특수한 의미를 갖는 다른 문자가 다음에 오지 않는 경우 문자 클래스는 단일 문자와만 일치합니다.
  • 탈자 기호(^) - 탈자 기호는 표시되는 위치에 따라 정규식에서 다음과 같이 두 가지 다른 의미를 갖습니다.
    • 문자 클래스의 첫 번째 문자인 경우 탈자 기호는 해당 문자 클래스의 문자를 부정합니다. 예를 들어, 'f[^io]rm'이라는 정규식은 'i' 또는 'o'가 두 번째 문자인 경우를 제외하고는 'f'로 시작하고 'rm'으로 종료하는 일련의 문자를 포함하는 단어와 일치합니다. 그러므로 문자 시퀀스 'farm'을 포함하는 단어와는 일치하지만 'firm' 또는 'form' 시퀀스를 포함하는 단어와는 일치하지 않습니다.
    • 정규식에서 첫 번째 문자인 경우 탈자 기호는 용어의 시작을 나타냅니다. 이 컨텍스트에서 탈자 기호는 경우에 따라서 앵커 문자라고 합니다.
  • 달러 부호($) - 표현식의 마지막 문자인 경우 달러 부호는 용어의 끝을 나타냅니다. 이 컨텍스트에서 달러 부호는 종종 앵커 문자라고 합니다.
    참고: 정규식이 전체 단어와 일치하도록 제한하려는 경우 앵커 문자가 매우 중요합니다. 예를 들어, 'f[aio]rm'이라는 정규식은 'farmer', 'infirm', 'former' 및 'conform' 등의 단어를 포함하여 'farm', 'firm' 및 'form'이라는 문자열을 포함하는 단어와 일치하는 반면, '^f[aio]rm'이라는 정규식은 이러한 예 중에 'farmer' 및 'former'라는 단어와만 일치하며, '^f[air]rm$'라는 표현식은 'farm', 'firm' 및 'form'이라는 단어와만 일치합니다.
  • 백슬래시(\) - 정규식에서 메타 문자의 실제 문자 값을 호출하는 데 사용합니다. 예를 들어, 'Comin?'라는 정규식은 'Coming', 'Comint' 및 'Comin?'이라는 질문과 일치합니다. 'Comin\?'라는 정규식은 'Comin?'라는 질문과만 일치합니다.

글로벌 옵션 HTTP 참조자 화이트리스트를 구성할 때 이전 목록에서 설명한 정규식 구문만 사용하십시오. 그러나 정규식 구문에서는 인쇄 불가능 문자, 특수 문자 클래스(예: 숫자 및 영문자 등)와 일치하도록 여러 특수 문자 시퀀스도 지원합니다. 전체 정규식 구문에 대한 설명은 Watson™ Explorer Engine 문서 범위를 벗어납니다. 정규식에 대한 전체 설명은 정규식 정보 사이트를 참조하십시오.