Vi의 정규 표현식 : 그룹 내에서 문자 클래스를 어떻게 사용합니까? (예 : [\ s \ w])


15

Vim에서 문자 클래스 \s는 공백 문자와 일치합니다. 내가 그룹에있는 특수 문자를 사용하고 때 예 [\s\w]는 단일 공백 또는 단어 문자와 일치하지 않는, 그것은 일치 않습니다 s또는 w.

그룹 내에서 문자 클래스를 어떻게 사용합니까?


8
정규 표현식 엔진의 일부 구현과 달리 Vim은 해당 표기법을 지원하지 않는 것 같습니다. [[:space:][:alnum:]_]컬렉션을 근사화하는데 사용될 수 \s\w비록.
피터 Lewerin

@PeterLewerin 답변으로 게시하십시오.
Christopher Bottoms

@ChristopherBottoms : 끝났습니다.
피터 Lewerin

답변:


11

그것은 그룹이 아니며, 범위이며, Vim에서는 문자 클래스를 사용할 수 없습니다 (예 : python 등의 다른 정규식 구현에서는 가능하지만 ). 대신 교대 를 사용해야합니다 .

/\(\w\|\s\)

또는:

/\v(\s|\w)

(또는, 솔루션 제안 에 의해 피터 Lewerin ).


2
문자 클래스에서 유효하지 않은 범위를 구성 할 수 있다고해서 \s문자 클래스 와 같은 것을 사용할 수 없다는 의미는 아닙니다 . Vim의 정규식 구현은 그러한 선택을했지만 다른 구현에서는 사용할 수 있습니다 [\s].
jamessan

@VanLaser이 정보로 답변을 편집하면 ([\ s] 다른 정규 표현식 구현에서는 불가능하지만 vim에서는 불가능합니다) 귀하의 답변을 수락합니다!
John HK

(좋아요 추가)
VanLaser

11

정규 표현식 엔진의 일부 구현과 달리 Vim [\s\w]은 컬렉션에서 해당 표기법 ( ) 을 지원하지 않는 것 같습니다 . POSIX 문자 클래스 표현식을 사용할 수 있습니다 .

  • [:blank:]와 동일합니다 \s.
  • [:space:]보다 많은 수의 공백 문자와 일치하며 \s와 같습니다 \_s.
  • [:alnum:]근사치 \w이지만 밑줄 ( _) 과 일치하지 않습니다 .

따라서 원하는 컬렉션을 [[:blank:][:alnum:]_]또는 로 쓸 수 있습니다 [[:space:][:alnum:]_].

나는 테스트하여이를 확인하지 않은,하지만에 설명되어 있습니다 :h regexp, :h /character-classes하고 :h /collection.

이식성 참고 : 다른 정규식 엔진에서는 \s일반적으로 Vim의 [:space:](또는 \_s) 와 동일 합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.