URL 맵의 RE2 사양

정규 표현식을 사용하는 트래픽 라우팅 규칙으로 URL 맵을 구성하려면 RE2 정규 표현식 구문의 요구사항과 제한사항을 이해해야 합니다.

RE2에는 다음과 같은 내장 제한사항이 있습니다.

  • RE2는 임의의 lookahead 또는 lookbehind 어설션을 지원하지 않으며 역참조도 지원하지 않습니다. 특히 다음 역참조 연산자는 지원되지 않습니다.
    • (?=) - 긍정 전방 탐색
    • (?!) - 부정 전방 탐색
    • (?<=) - 긍정적 후방 탐색
    • (?<!) - 부정적 lookbehind
    • \N - N이 정수인 역참조
  • RE2는 \cx를 Control-X 문자로 인식하지 않습니다.
  • RE2가 원자적 그룹화 연산자 (?>...)++를 인식하지 못함
  • RE2는 \C, \G 또는 \X를 인식하지 않습니다.
  • RE2는 조건부 하위 패턴 (?(...)...), 주석 (?#...), 패턴 참조 (?R) (?1) (?P>foo) 또는 C 콜아웃 (?C...)을 인식하지 않습니다.

앞서 설명한 RE2 제한 외에도 다음 허용 목록을 사용하여 정규 표현식 구문에 추가 제한이 적용됩니다.

  • 단일 문자 연산자는 허용됩니다.
  • 그룹은 submatch 연산자만 사용할 수 있습니다.
  • 그룹은 중복 없이만 허용됩니다.
  • 문자 반복은 다음 항목과 함께 단일 정규 표현식에서만 허용됩니다.
  • 범위에는 다음만 포함될 수 있습니다.

빈 문자열 및 빈 문자열의 유사 항목

연산자 설명
^ 텍스트 또는 줄의 시작 부분 (m=true)
$ 텍스트 끝 (예: \z, \Z 아님) 또는 줄 끝 (m=true)
\A 텍스트 시작 부분
\b ASCII 단어 경계 (\w가 한쪽에 있고 \W, \A 또는 \z가 다른 쪽에 있음)
\B ASCII 단어 경계에 있지 않음
\g 검색 중인 하위 텍스트의 시작 부분
\G 마지막 경기가 끝날 때
\z 텍스트 끝

반복

연산자 설명
x* 0개 이상의 x, 더 많은 것이 좋음
x+ x가 하나 이상, 많을수록 좋음
x? x가 0개 또는 1개(1개 선호)
x{n,m} N 또는 n+1 또는 ... 또는 m x, 더 많은 것을 선호
x{n,} N개 이상 x, 더 많은 것을 선호
x{n} 정확히 n x
x*? 0개 이상의 x, 적은 수 선호
x+? x가 하나 이상, 적은 쪽 선호
x?? 0 또는 1 x, 0이 선호됨
x{n,m}? N 또는 n+1 또는 ... 또는 m x, 적은 쪽을 선호
x{n,}? x가 N개 이상, 적은 수 선호
x{n}? 정확히 n x

하위 일치

연산자 설명
(re) 번호가 지정된 캡처링 그룹 (하위 일치)
(?P<name>re) 이름이 지정되고 번호가 매겨진 캡처링 그룹 (하위 일치)
(?<name>re) 이름이 지정되고 번호가 매겨진 캡처링 그룹 (하위 일치)
(?:re) 비캡처링 그룹
(?flags) 현재 그룹 내에서 플래그를 설정합니다. 캡처하지 않습니다.
(?flags:re) re 중 플래그 설정, 캡처하지 않음

범위

연산자 설명
[] 범위
\d 숫자 (≡ [0-9])
\D 숫자가 아님 (≡ [^0-9])
\s 공백 (≡ [\t\n\f\r ])
\S 공백이 아님 (≡ [^\t\n\f\r ])
\w 단어 문자 (≡ [0-9A-Za-z_])
\W 단어 문자가 아님 (≡ [^0-9A-Za-z_])
[[:alnum:]] 영숫자 (≡ [0-9A-Za-z])
[[:alpha:]] 알파벳 (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] 공백 (≡ [\t ])
[[:cntrl:]] 제어 (≡ [\x00-\x1F\x7F])
[[:digit:]] 숫자 (≡ [0-9])
[[:lower:]] 소문자 (≡ [a-z])
[[:space:]] 공백 (≡ [\t\n\v\f\r ])
[[:upper:]] 대문자 (≡ [A-Z])
[[:word:]] 단어 문자 (≡ [0-9A-Za-z_])
[[:xdigit:]] 16진수 (≡ [0-9A-Fa-f])

범위에서 허용되는 문자

문자 범위 설명
0-9, A-Z, a-z 영숫자
\x00-\x7F ASCII
0-9A-Fa-f 16진수
\t\n\v\f\r 공백
^ 범위 부정
!"#$%&'()*+,\-.:;<=>?@[\\\]^_`{|}~ 기타 문자