@c Copyright (C) 1994, 1996, 1998, 2000--2001, 2003--2007, 2009--2025 Free
@c Software Foundation, Inc.
@c
@c Permission is granted to copy, distribute and/or modify this document
@c under the terms of the GNU Free Documentation License, Version 1.3 or
@c any later version published by the Free Software Foundation; with no
@c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
@c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>.

@c this regular expression description is for: generic

@menu
* awk regular expression syntax::
* egrep regular expression syntax::
* ed regular expression syntax::
* emacs regular expression syntax::
* gnu-awk regular expression syntax::
* grep regular expression syntax::
* posix-awk regular expression syntax::
* posix-basic regular expression syntax::
* posix-egrep regular expression syntax::
* posix-extended regular expression syntax::
* posix-minimal-basic regular expression syntax::
* sed regular expression syntax::
@end menu

@node awk regular expression syntax
@subsection @samp{awk} regular expression syntax


The character @samp{.} matches any single character except the null character.


@table @samp

@item +
indicates that the regular expression should match one or more occurrences of the previous atom or regexp.
@item ?
indicates that the regular expression should match zero or one occurrence of the previous atom or regexp.
@item \+
matches a @samp{+}
@item \?
matches a @samp{?}.
@end table


Bracket expressions are used to match ranges of characters.  Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid.  Within square brackets, @samp{\} can be used to quote the following character.  Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit.

GNU extensions are not supported and so @samp{\w}, @samp{\W}, @samp{\<}, @samp{\>}, @samp{\b}, @samp{\B}, @samp{\`}, and @samp{\'} match @samp{w}, @samp{W}, @samp{<}, @samp{>}, @samp{b}, @samp{B}, @samp{`}, and @samp{'} respectively.

Grouping is performed with parentheses @samp{()}.  An unmatched @samp{)} matches just itself.  A backslash followed by a digit matches that digit.

The alternation operator is @samp{|}.

The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets.  Within brackets, @samp{^} can be used to invert the membership of the character class being specified.

@samp{*}, @samp{+} and @samp{?} are special at any point in a regular expression except:
@enumerate

@item At the beginning of a regular expression

@item After an open-group, signified by
@samp{(}
@item After the alternation operator @samp{|}

@end enumerate




The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups.


@node egrep regular expression syntax
@subsection @samp{egrep} regular expression syntax


The character @samp{.} matches any single character.


@table @samp

@item +
indicates that the regular expression should match one or more occurrences of the previous atom or regexp.
@item ?
indicates that the regular expression should match zero or one occurrence of the previous atom or regexp.
@item \+
matches a @samp{+}
@item \?
matches a @samp{?}.
@end table


Bracket expressions are used to match ranges of characters.  Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid.  Within square brackets, @samp{\} is taken literally.  Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit.

GNU extensions are supported:
@enumerate

@item @samp{\w} matches a character within a word

@item @samp{\W} matches a character which is not within a word

@item @samp{\<} matches the beginning of a word

@item @samp{\>} matches the end of a word

@item @samp{\b} matches a word boundary

@item @samp{\B} matches characters which are not a word boundary

@item @samp{\`} matches the beginning of the whole input

@item @samp{\'} matches the end of the whole input

@end enumerate


Grouping is performed with parentheses @samp{()}.  An unmatched @samp{)} matches just itself.  A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number.  For example @samp{\2} matches the second group expression.  The order of group expressions is determined by the position of their opening parenthesis @samp{(}.

The alternation operator is @samp{|}.

The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets.  Within brackets, @samp{^} can be used to invert the membership of the character class being specified.

The characters @samp{*}, @samp{+} and @samp{?} are special anywhere in a regular expression.

Intervals are specified by @samp{@{} and @samp{@}}.  Invalid intervals are treated as literals, for example @samp{a@{1} is treated as @samp{a\@{1}

The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups.


@node ed regular expression syntax
@subsection @samp{ed} regular expression syntax


The character @samp{.} matches any single character except the null character.


@table @samp

@item \+
indicates that the regular expression should match one or more occurrences of the previous atom or regexp.
@item \?
indicates that the regular expression should match zero or one occurrence of the previous atom or regexp.
@item + and ?
match themselves.
@end table


Bracket expressions are used to match ranges of characters.  Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid.  Within square brackets, @samp{\} is taken literally.  Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit.

GNU extensions are supported:
@enumerate

@item @samp{\w} matches a character within a word

@item @samp{\W} matches a character which is not within a word

@item @samp{\<} matches the beginning of a word

@item @samp{\>} matches the end of a word

@item @samp{\b} matches a word boundary

@item @samp{\B} matches characters which are not a word boundary

@item @samp{\`} matches the beginning of the whole input

@item @samp{\'} matches the end of the whole input

@end enumerate


Grouping is performed with backslashes followed by parentheses @samp{\(}, @samp{\)}.  A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number.  For example @samp{\2} matches the second group expression.  The order of group expressions is determined by the position of their opening parenthesis @samp{\(}.

The alternation operator is @samp{\|}.

The character @samp{^} only represents the beginning of a string when it appears:
@enumerate

@item
At the beginning of a regular expression

@item After an open-group, signified by
@samp{\(}

@item After the alternation operator @samp{\|}

@end enumerate


The character @samp{$} only represents the end of a string when it appears:
@enumerate

@item At the end of a regular expression

@item Before a close-group, signified by
@samp{\)}
@item Before the alternation operator @samp{\|}

@end enumerate


@samp{\*}, @samp{\+} and @samp{\?} are special at any point in a regular expression except:
@enumerate

@item At the beginning of a regular expression

@item After an open-group, signified by
@samp{\(}
@item After the alternation operator @samp{\|}

@end enumerate


Intervals are specified by @samp{\@{} and @samp{\@}}.  Invalid intervals such as @samp{a\@{1z} are not accepted.

The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups.


@node emacs regular expression syntax
@subsection @samp{emacs} regular expression syntax


The character @samp{.} matches any single character except newline.


@table @samp

@item +
indicates that the regular expression should match one or more occurrences of the previous atom or regexp.
@item ?
indicates that the regular expression should match zero or one occurrence of the previous atom or regexp.
@item \+
matches a @samp{+}
@item \?
matches a @samp{?}.
@end table


Bracket expressions are used to match ranges of characters.  Bracket expressions where the range is backward, for example @samp{[z-a]}, are ignored.  Within square brackets, @samp{\} is taken literally.  Character classes are not supported, so for example you would need to use @samp{[0-9]} instead of @samp{[[:digit:]]}.

GNU extensions are supported:
@enumerate

@item @samp{\w} matches a character within a word

@item @samp{\W} matches a character which is not within a word

@item @samp{\<} matches the beginning of a word

@item @samp{\>} matches the end of a word

@item @samp{\b} matches a word boundary

@item @samp{\B} matches characters which are not a word boundary

@item @samp{\`} matches the beginning of the whole input

@item @samp{\'} matches the end of the whole input

@end enumerate


Grouping is performed with backslashes followed by parentheses @samp{\(}, @samp{\)}.  A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number.  For example @samp{\2} matches the second group expression.  The order of group expressions is determined by the position of their opening parenthesis @samp{\(}.

The alternation operator is @samp{\|}.

The character @samp{^} only represents the beginning of a string when it appears:
@enumerate

@item
At the beginning of a regular expression

@item After an open-group, signified by
@samp{\(}

@item After the alternation operator @samp{\|}

@end enumerate


The character @samp{$} only represents the end of a string when it appears:
@enumerate

@item At the end of a regular expression

@item Before a close-group, signified by
@samp{\)}
@item Before the alternation operator @samp{\|}

@end enumerate


@samp{*}, @samp{+} and @samp{?} are special at any point in a regular expression except:
@enumerate

@item At the beginning of a regular expression

@item After an open-group, signified by
@samp{\(}
@item After the alternation operator @samp{\|}

@end enumerate




The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups.


@node gnu-awk regular expression syntax
@subsection @samp{gnu-awk} regular expression syntax


The character @samp{.} matches any single character.


@table @samp

@item +
indicates that the regular expression should match one or more occurrences of the previous atom or regexp.
@item ?
indicates that the regular expression should match zero or one occurrence of the previous atom or regexp.
@item \+
matches a @samp{+}
@item \?
matches a @samp{?}.
@end table


Bracket expressions are used to match ranges of characters.  Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid.  Within square brackets, @samp{\} can be used to quote the following character.  Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit.

GNU extensions are supported:
@enumerate

@item @samp{\w} matches a character within a word

@item @samp{\W} matches a character which is not within a word

@item @samp{\<} matches the beginning of a word

@item @samp{\>} matches the end of a word

@item @samp{\b} matches a word boundary

@item @samp{\B} matches characters which are not a word boundary

@item @samp{\`} matches the beginning of the whole input

@item @samp{\'} matches the end of the whole input

@end enumerate


Grouping is performed with parentheses @samp{()}.  An unmatched @samp{)} matches just itself.  A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number.  For example @samp{\2} matches the second group expression.  The order of group expressions is determined by the position of their opening parenthesis @samp{(}.

The alternation operator is @samp{|}.

The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets.  Within brackets, @samp{^} can be used to invert the membership of the character class being specified.

@samp{*}, @samp{+} and @samp{?} are special at any point in a regular expression except:
@enumerate

@item At the beginning of a regular expression

@item After an open-group, signified by
@samp{(}
@item After the alternation operator @samp{|}

@end enumerate


Intervals are specified by @samp{@{} and @samp{@}}.  Invalid intervals are treated as literals, for example @samp{a@{1} is treated as @samp{a\@{1}

The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups.


@node grep regular expression syntax
@subsection @samp{grep} regular expression syntax


The character @samp{.} matches any single character.


@table @samp

@item \+
indicates that the regular expression should match one or more occurrences of the previous atom or regexp.
@item \?
indicates that the regular expression should match zero or one occurrence of the previous atom or regexp.
@item + and ?
match themselves.
@end table


Bracket expressions are used to match ranges of characters.  Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid.  Within square brackets, @samp{\} is taken literally.  Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit.

GNU extensions are supported:
@enumerate

@item @samp{\w} matches a character within a word

@item @samp{\W} matches a character which is not within a word

@item @samp{\<} matches the beginning of a word

@item @samp{\>} matches the end of a word

@item @samp{\b} matches a word boundary

@item @samp{\B} matches characters which are not a word boundary

@item @samp{\`} matches the beginning of the whole input

@item @samp{\'} matches the end of the whole input

@end enumerate


Grouping is performed with backslashes followed by parentheses @samp{\(}, @samp{\)}.  A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number.  For example @samp{\2} matches the second group expression.  The order of group expressions is determined by the position of their opening parenthesis @samp{\(}.

The alternation operator is @samp{\|}.

The character @samp{^} only represents the beginning of a string when it appears:
@enumerate

@item
At the beginning of a regular expression

@item After an open-group, signified by
@samp{\(}

@item After a newline

@item After the alternation operator @samp{\|}

@end enumerate


The character @samp{$} only represents the end of a string when it appears:
@enumerate

@item At the end of a regular expression

@item Before a close-group, signified by
@samp{\)}
@item Before a newline

@item Before the alternation operator @samp{\|}

@end enumerate


@samp{\*}, @samp{\+} and @samp{\?} are special at any point in a regular expression except:
@enumerate

@item At the beginning of a regular expression

@item After an open-group, signified by
@samp{\(}
@item After a newline

@item After the alternation operator @samp{\|}

@end enumerate


Intervals are specified by @samp{\@{} and @samp{\@}}.  Invalid intervals such as @samp{a\@{1z} are not accepted.

The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups.


@node posix-awk regular expression syntax
@subsection @samp{posix-awk} regular expression syntax


The character @samp{.} matches any single character except the null character.


@table @samp

@item +
indicates that the regular expression should match one or more occurrences of the previous atom or regexp.
@item ?
indicates that the regular expression should match zero or one occurrence of the previous atom or regexp.
@item \+
matches a @samp{+}
@item \?
matches a @samp{?}.
@end table


Bracket expressions are used to match ranges of characters.  Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid.  Within square brackets, @samp{\} can be used to quote the following character.  Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit.

GNU extensions are not supported and so @samp{\w}, @samp{\W}, @samp{\<}, @samp{\>}, @samp{\b}, @samp{\B}, @samp{\`}, and @samp{\'} match @samp{w}, @samp{W}, @samp{<}, @samp{>}, @samp{b}, @samp{B}, @samp{`}, and @samp{'} respectively.

Grouping is performed with parentheses @samp{()}.  An unmatched @samp{)} matches just itself.  A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number.  For example @samp{\2} matches the second group expression.  The order of group expressions is determined by the position of their opening parenthesis @samp{(}.

The alternation operator is @samp{|}.

The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets.  Within brackets, @samp{^} can be used to invert the membership of the character class being specified.

@samp{*}, @samp{+} and @samp{?} are special at any point in a regular expression except the following places, where they are not allowed:
@enumerate

@item At the beginning of a regular expression

@item After an open-group, signified by
@samp{(}
@item After the alternation operator @samp{|}

@end enumerate


Intervals are specified by @samp{@{} and @samp{@}}.  Invalid intervals are treated as literals, for example @samp{a@{1} is treated as @samp{a\@{1}

The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups.


@node posix-basic regular expression syntax
@subsection @samp{posix-basic} regular expression syntax
This is a synonym for ed.
@node posix-egrep regular expression syntax
@subsection @samp{posix-egrep} regular expression syntax
This is a synonym for egrep.
@node posix-extended regular expression syntax
@subsection @samp{posix-extended} regular expression syntax


The character @samp{.} matches any single character except the null character.


@table @samp

@item +
indicates that the regular expression should match one or more occurrences of the previous atom or regexp.
@item ?
indicates that the regular expression should match zero or one occurrence of the previous atom or regexp.
@item \+
matches a @samp{+}
@item \?
matches a @samp{?}.
@end table


Bracket expressions are used to match ranges of characters.  Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid.  Within square brackets, @samp{\} is taken literally.  Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit.

GNU extensions are supported:
@enumerate

@item @samp{\w} matches a character within a word

@item @samp{\W} matches a character which is not within a word

@item @samp{\<} matches the beginning of a word

@item @samp{\>} matches the end of a word

@item @samp{\b} matches a word boundary

@item @samp{\B} matches characters which are not a word boundary

@item @samp{\`} matches the beginning of the whole input

@item @samp{\'} matches the end of the whole input

@end enumerate


Grouping is performed with parentheses @samp{()}.  An unmatched @samp{)} matches just itself.  A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number.  For example @samp{\2} matches the second group expression.  The order of group expressions is determined by the position of their opening parenthesis @samp{(}.

The alternation operator is @samp{|}.

The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets.  Within brackets, @samp{^} can be used to invert the membership of the character class being specified.

@samp{*}, @samp{+} and @samp{?} are special at any point in a regular expression except the following places, where they are not allowed:
@enumerate

@item At the beginning of a regular expression

@item After an open-group, signified by
@samp{(}
@item After the alternation operator @samp{|}

@end enumerate


Intervals are specified by @samp{@{} and @samp{@}}.  Invalid intervals such as @samp{a@{1z} are not accepted.

The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups.


@node posix-minimal-basic regular expression syntax
@subsection @samp{posix-minimal-basic} regular expression syntax


The character @samp{.} matches any single character except the null character.



Bracket expressions are used to match ranges of characters.  Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid.  Within square brackets, @samp{\} is taken literally.  Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit.

GNU extensions are supported:
@enumerate

@item @samp{\w} matches a character within a word

@item @samp{\W} matches a character which is not within a word

@item @samp{\<} matches the beginning of a word

@item @samp{\>} matches the end of a word

@item @samp{\b} matches a word boundary

@item @samp{\B} matches characters which are not a word boundary

@item @samp{\`} matches the beginning of the whole input

@item @samp{\'} matches the end of the whole input

@end enumerate


Grouping is performed with backslashes followed by parentheses @samp{\(}, @samp{\)}.  A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number.  For example @samp{\2} matches the second group expression.  The order of group expressions is determined by the position of their opening parenthesis @samp{\(}.



The character @samp{^} only represents the beginning of a string when it appears:
@enumerate

@item
At the beginning of a regular expression

@item After an open-group, signified by
@samp{\(}

@end enumerate


The character @samp{$} only represents the end of a string when it appears:
@enumerate

@item At the end of a regular expression

@item Before a close-group, signified by
@samp{\)}
@end enumerate




Intervals are specified by @samp{\@{} and @samp{\@}}.  Invalid intervals such as @samp{a\@{1z} are not accepted.

The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups.


@node sed regular expression syntax
@subsection @samp{sed} regular expression syntax
This is a synonym for ed.
