다음을 통해 공유


ECMAScript 및 정식 일치 동작

업데이트: 2007년 11월

ECMAScript의 동작과 정식 정규식의 동작은 다음 세 가지 측면에서 다릅니다.

  • 일치 식에서 문자 클래스가 서로 다르게 지정됩니다. 정식 정규식에서는 기본적으로 유니코드 문자 범주를 지원하지만 ECMAScript에서는 유니코드를 지원하지 않습니다.

  • 자체 역참조가 있는 정규식 캡처 클래스는 각 캡처를 반복할 때마다 업데이트해야 합니다.

  • 8진수 이스케이프와 역참조 간의 모호성이 서로 다르게 취급됩니다.

참고:

기본적으로 정규식 엔진에서는 정식 일치 동작을 사용합니다. Regex.Regex(String, RegexOptions) 생성자나 이러한 정규식 대조 메서드(예: Regex.Match(String, String, RegexOptions), Regex.Matches(String, String, RegexOptions)Regex.Replace(String, String, String, RegexOptions))의 options 매개 변수에 RegexOptions.ECMAScript 플래그가 포함되어 있으면 ECMAScript 호환 동작이 사용됩니다.

다음 표에는 정식 정규식과 ECMAScript 정규식에서 8진수 및 역참조를 어떻게 해석하는지 그 차이점을 보여 줍니다.

정식 정규식 동작

ECMAScript 동작

\ 다음에 0이 있고, 그 다음에 8진수가 0-2개 있는 경우, 8진수로 해석합니다. 예를 들어, \044는 항상 '$'를 나타냅니다.

동작이 동일합니다.

\ 다음에 1에서 9 사이의 10진수가 있고 그 다음에 또다른 10진수가 없는 경우, 역참조로 해석합니다. 예를 들어, \9는 캡처 9가 없더라도 항상 역참조 9로 해석됩니다. 캡처가 없는 경우에는 정규식 파서에서 구문 예외가 발생합니다.

단일 10진수 캡처가 있으면 그 숫자에 대한 역참조로 해석하고, 그렇지 않으면 리터럴로 해석합니다.

\ 다음에 1에서 9 사이의 숫자가 있고 그 다음에 또 다른 10진수가 있으면 숫자를 10진수 값으로 해석합니다. 해당 캡처가 있을 경우에는 해당 식을 역참조로 해석합니다.

그렇지 않으면 선행 8진수를 8진수 377까지 해석합니다. 즉, 값의 하위 8비트만 고려하고 나머지 숫자는 리터럴로 해석합니다. 예를 들어, 식 \3000의 경우 캡처 300이 있으면 역참조 300으로 해석합니다. 캡처 300이 없으면 8진수 300 다음에 0이 있는 것으로 해석합니다.

\ 다음에 1에서 9 사이의 10진수가 있고 그 다음에 10진수가 또 있는 경우, 캡처를 참조할 수 있는 10진수 값으로 가능한 많은 숫자를 변환하여 역참조로 해석합니다. 변환할 수 있는 숫자가 없는 경우에는 선행 8진수를 사용하여 8진수 377까지를 8진수로 해석하고 나머지 숫자는 리터럴로 해석합니다.

참고 항목

기타 리소스

정규식 언어 요소