'<start>' and '<end>' can take one of these forms:

- number
+
If '<start>' or '<end>' is a number, it specifies an
absolute line number (lines count from 1).
+

- `/regex/`
+
This form will use the first line matching the given
POSIX regex. If '<start>' is a regex, it will search from the end of
the previous `-L` range, if any, otherwise from the start of file.
If '<start>' is `^/regex/`, it will search from the start of file.
If '<end>' is a regex, it will search
starting at the line given by '<start>'.
+

- +offset or -offset
+
This is only valid for '<end>' and will specify a number
of lines before or after the line given by '<start>'.

+
If `:<funcname>` is given in place of '<start>' and '<end>', it is a
regular expression that denotes the range from the first funcname line
that matches '<funcname>', up to the next funcname line. `:<funcname>`
searches from the end of the previous `-L` range, if any, otherwise
from the start of file. `^:<funcname>` searches from the start of
file. The function names are determined in the same way as `git diff`
works out patch hunk headers (see 'Defining a custom hunk-header'
in linkgit:gitattributes[5]).
