Regex у Vi: Як користуються класами символів всередині груп? (наприклад, [\ s \ w])


15

У Vim клас символів \sвідповідає будь-якому символу пробілу. Коли я використовую ці спеціальні символи в групах, наприклад, [\s\w]він не відповідає жодному пробілу або символу слова, він відповідає sабо w.

Як користуються класами символів всередині груп?


8
На відміну від деяких реалізацій двигунів регулярної експресії, схоже, Vim's не підтримує це позначення. [[:space:][:alnum:]_]може використовуватися для наближення колекції \sі \w, хоча.
Пітер Леверін

@PeterLewerin Будь ласка, опублікуйте це як відповідь.
Крістофер Ботс

@ChristopherBottoms: зроблено.
Пітер Леверін

Відповіді:


11

Це не група, це діапазон, і у Vim ви не можете використовувати класи символів (хоча це можливо і в інших реалізаціях регулярних виразів, наприклад, у python ). Вам замість цього доведеться використовувати чергування :

/\(\w\|\s\)

або:

/\v(\s|\w)

(Або, то запропоноване рішення від Peter Lewerin ).


2
Тільки тому, що можна сконструювати недійсний діапазон у класі символів, це не означає, що не повинно бути можливим використовувати щось на зразок \sу класі символів. Здійснюється, що реалізація регулярних виразів Vim зробила такий вибір, але інші реалізації дозволяють використовувати [\s].
Jamessan

@VanLaser Якщо ви відредагуєте відповідь з цією інформацією ([\ s] - це можливість в інших програмах-реалізаціях, але не in vim), я прийму вашу відповідь!
Джон ХК

(все гаразд, додано)
VanLaser

11

На відміну від деяких реалізацій двигунів регулярної експресії, схоже, Vim's не підтримує це позначення ( [\s\w]) у колекціях. Однак можна використовувати вирази класів символів POSIX .

  • [:blank:]те саме, що \s.
  • [:space:]відповідає більшій кількості символів пробілу, ніж \sце, і, здається, еквівалентно \_s.
  • [:alnum:]наближається \w, але не відповідає підкресленню ( _).

Отже колекція, яку ви хотіли, може бути написана як [[:blank:][:alnum:]_]або [[:space:][:alnum:]_].

Я не перевірив це шляхом тестування, але документовано в :h regexp, :h /character-classesі :h /collection.

Примітка щодо переносимості: В інших двигунах регулярного вирівнювання \sзазвичай такий самий, як [:space:](або \_s) у Vim.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.