Vim 정규식에서 9 개 이상의 캡처 그룹을 허용하지 않는 이유는 무엇입니까?


16

에서 :h E65우리는 빔 교체 명령에 9 개 이상 캡처 그룹을 허용하지 않는 것을 볼 수 있습니다.

예를 들어 다음 명령이 작동합니다.

s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)/\9\8\7\6\5\4\3\2\1

그러나 캡처 그룹이 하나 더있는 것은 실패합니다.

s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)/\10\9\8\7\6\5\4\3\2\1

내 질문은 왜 실패하는지에 관한 것이 아니라 (Vim 하드 한계) Vim왜이 한계가 있습니까?

또한 9 개 이상의 캡처 그룹이있는 실제 정규식은 읽고 유지하는 데 꽤 괴물 일 수 있지만 여전히 궁금합니다.


2
Vim과 관련이 없을 수도 있습니다 : stackoverflow.com/a/10993346/2558252
nobe4

1
@ nobe4 : 흥미 롭습니다! 따라서 이러한 도구를 만드는 사람들은 9 개 이상의 그룹이 쓸모 없다고 생각했습니다.
statox

나는이 한계가 vi에서 왔고, 이는 ed / sed의 한계를 상속했다고 가정합니다. 몇 년 전 저는 99 개 그룹을 지원하는 패치를 만들었지 만 포함되지 않았습니다.
Christian Brabandt

1
@ChristianBrabandt보다 유용한 추가 기능은 in : 과 같은 숫자 플래그 를 구현 하는 것입니다. 이것은 아마도 내가 Vim에서 가장 놓친 기능 일 것입니다. seds/.../.../3
Sato Katsura

2
명명 된 캡처를 지원하면이 문제를 완화 할 수 있습니다. 즉, 9 개의 캡처 그룹 근처에서 가장 많이 본 것은 사람들이 캡처되지 않은 그룹을 사용할 수 있다는 것을 알지 못하는 때였습니다 \%().
jamessan

답변:


24

명백한 이유는 두 자리 이상의 숫자를 가진 그룹이 모호하기 때문입니다. \12그룹 12 또는 그룹 1 다음에 문자열 2?

효율 (지수 매칭 시간 등)과 관련된 다른 이유가 있습니다. 이것들 ed은 쓰여졌을 때 쇼 스토퍼 였습니다. 그 이후로 더 나은 알고리즘이 발견되었습니다.


이것은 좋은 가능성입니다. 이것에 관한 참조 / 독서가 있습니까?
nobe4

2
@ nobe4 모호한 부분 : 아니오, 그러나 IMO는 분명합니다. 효율성 부분을 위해서는 정규식의 초기 구현에 대해 읽어야합니다. 당시에는 잘 알려진 문제였습니다. 나는 정확한 인용을 가지고 있지 않지만 찾기가 어렵지 않아야합니다.
사토 카츠라

실제로 그럴듯하게 들립니다.
statox

4
예, 파서는 백 슬래시 후 한 자리를 찾도록 작성되었으며 절대 변경되지 않았 음을 거의 확실합니다. 이것은 오래 전에 충분히 일반적이었습니다. 다른 언어는이 문제를 해결하는 방법을 제시했습니다 (예 : \11일관성이 없지만 일반적으로 괜찮 \g{11}으며 역 참조 및 ${11}대체 와 같은 것들 중 적어도 11 개가있는 경우 캡처에 대한 참조 만 고려 ) 그중 하나를 소개했습니다.
hobbs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.