12.7. Extended Regular Expressions

Extended regular expressions were introduced in Section 8.4. vile provides essentially the same facilities as nvi's extended option. This includes the POSIX bracket expressions for character classes, [[:alnum::]], with some extensions (additional classes and abbreviations), and interval expressions such as {,10}. The syntax is somewhat different though from nvi, relying upon additional backslash-escaped characters:


Indicates alternation, house\|home.


Matches one or more of the preceding regular expression.


Matches zero or one of the preceding regular expression.


Provides grouping for *, \+, and \?, as well as making matched sub-texts available in the replacement part of a substitute command (\1, \2, etc.).

\s \S

Match whitespace and non-whitespace characters, respectively.

\w \W

Match "word-constituent" characters (alphanumerics and the underscore, `_') and non-word-constituent characters, respectively. For example, \w\+ would match C/C++ identifiers and keywords.[1]

\d \D

Match digits and non-digits, respectively.

\p \P

Match printable and non-printable characters respectively. Whitespace is considered to be printable.

vile allows the escape sequences \b, \f, \r, \t, and \n to appear in the replacement part of a substitute command. They stand for backspace, form feed, carriage return, tab and newline, respectively. Also, from the vile documentation:

Note that vile mimics perl's handling of \u\L\1\E instead of vi's. Given :s/\(abc\)/\u\L\1\E/ vi will replace with abc whereas vile and perl will replace with Abc. This is somewhat more useful for capitalizing words.



For the pedantic among you, it also matches identifiers that start with a leading digit; usually this isn't much of a problem.