요약하면, 아닙니다. Vim의 정규식은 독특한 맛이며, 다른 맛처럼 행동하도록하는 옵션은 없습니다.
나는 이것이 좋은 것이라고 생각한다.
마법
이 'magic'
옵션은 Vim이 사용하는 정규식의 맛을 변경하지 않습니다. 단순히 \
탈출 한 많은 원자 들의 거동을 뒤집습니다.
예를 들어, 기본적 +
으로 리터럴 +
문자입니다. 여기서 \+
"하나 이상의 선행 원자"를 의미합니다. 대조적으로, *
"앞의 원자 중 0 이상"을 의미하는 반면 \*
리터럴은 *
입니다. 많은 사람들이 이것을 매우 혼란스럽게 생각합니다. 사용 \v
하여 패턴으로하면 좀 더 일관성이 있습니다. :help 'magic'
좋은 요약을 제공합니다.
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
* * \* \* any number of the previous atom
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'
개인적으로 기본 동작은 코드 파일에 유용 foo(
하며 리터럴을 사용하여과 같은 것을 검색하는 것은 드문 일이 아닙니다 (
.
Vim 자신의 정규식 맛
나는 Vim이 PCRE를 지원하기를 원하는 많은 사람들을 목격했다. 개인적으로 다른 도구가 Vim의 정규 표현식을 지원하기를 바랍니다. PCRE에서 달성하기에 불가능하거나 너무 성가신 일부 기능이 있습니다.
PCRE에서 불가능
둘러보기 는 패턴을 일치시키려는 패턴 전후에 패턴이 일치하거나 일치하지 않는지 확인할 수있는 일반적인 기능입니다. 예를 들어, PCRE 패턴 q(?!u)
(또는 Vim regex 패턴 qu\@!
)은 q
뒤에 오는 것과 일치 하지 않습니다 u
. (이것보다 더 정확하므로 q[^u]
, 뒤에 약간의 문자 가 필요 합니다 q
.)
가변 길이 네거티브 룩백
PCRE 및 기타 여러 가지 향미에는 음의 비하인드 패턴이 고정 길이 여야한다는 제한이 있습니다. 그 말과 같은 패턴 것을 (?<![a-z]{3})foo
"문자열을 의미 foo
하지 앞에 정확히 3 소문자 문자")은 잘되어 있지만 (?<![a-z]+)foo
( "문자열 의미 foo
가 선행되지 숫자 소문자")이 일치하지 않음.
Vim에는이 제한이 없습니다. Vim에서와 같은 패턴은 \([a-z]\+\)\@<!foo
보기에는 약간 추악하지만 완벽하게 유효합니다.
Vim 정규식에서 더 쉬움
Vim의 정규 표현식에서 훨씬 더 좋은 점이 있습니다.
경기 시작 및 종료 앵커
가장 눈에 띄는, 내 생각에서입니다 \zs
및 \ze
앵커. 이것으로 경기의 시작과 끝을 지정할 수 있습니다. 예를 들어, foo(\zs.*\ze)
사이의 유일한 것과 일치 (
와 )
같은 함수 호출에 foo(...)
. 이 작업은 PCRE에서 수행 할 수 있지만 약간의 지루한 둘러보기를 사용해야합니다.(?<=foo\().*(?=\))
접두사 일치
Vim이 할 수있는 또 다른 멋진 일은 특정 문자 시퀀스의 접두사 (빈 접두사 포함)와 일치하는 것입니다. 예를 들어,에 맞게 f
, fo
, foo
, 또는 food
패턴이 f\%[ood]
사용될 수있다. PCRE에서 이러한 패턴은 다음과 같습니다 f(o(od?)?)?
. (더 긴 줄에 대해 상상해보십시오!)
커서, 라인 및 열 위치 일치
Vim의 정규 표현식에는 버퍼의 위치를 일치시키는 앵커가 있습니다.
\%23c
열 23과 일치
\%<23c
23 열 이전에 일치
\%>23c
23 열 이후의 일치
\%16l
16 행 일치
- 열 마찬가지로, 대한 앵커가 이전 또는 이후에 행 번호
\%#
커서 위치와 일치
Vim의 정규식을 맛보는 것이 가치가 있다고 생각합니다. 주로 프로그래밍에 사용되는 텍스트 편집기에서 사용하기에 적합하며 매우 강력합니다.
\v
포함<>
AFAIK가 빔에 고유 단어 경계를. 아니, 그냥 "Vim regex"라고 설명하면됩니다. (긍정적이지 않아 답변으로 게시하지 않음)