# 21. Appendix

Chapter Contents | Prev | Next
Keyword Search:
www.openlinksw.com
docs.openlinksw.com
Book Home
Contents
Preface
Appendix
YACC SQL Grammar Reference
Error Codes Reference
Release Notes
Product Support
Virtuoso System Tables
Basic Syntax of Regular Expressions
Server & client versions compatibility

## 21.7. Basic Syntax of Regular Expressions

The two special symbols: '^' and '$' indicate the start and the end of a string respectively, like so:

- ^The: matches any string that starts with The;
- of despair$: matches a string that ends in the substring of despair;
- ^abc$: a string that starts and ends with abc -- that could only be abc itself!
- notice: a string that has the text notice in it.

Without either of the above special character you are allowing the pattern to occur anywhere inside the string.

The symbols '*', '+', and '?' denote the number of times a character or a sequence of characters may occur. What they mean is: zero or more, one or more, and zero or one. Here are some examples:

- ab*: matches a string that has an a followed by zero or more b's (a, ab, abbb, etc.);
- ab+: same, but there is at least one b (ab, abbb, etc.);
- ab?: there might be a b or not;
- a?b+$: a possible a followed by one or more b's ending a string.

You can also use bounds, which come inside braces and indicate ranges in the number of occurences:

- ab{2}: matches a string that has an a followed by exactly two b's (abb);
- ab{2,}: there are at least two b's (abb, abbbb, etc.);
- ab{3,5}: from three to five b's (abbb, abbbb, or abbbbb).

Note, that you must always specify the first number of a range (i.e, {0,2}, not {,2}). Also, as you may have noticed, the symbols '*', '+', and '?' have the same effect as using the bounds {0,}, {1,}, and {0,1}, respectively.

Now, to quantify a sequence of characters, put them inside parentheses:

- a(bc)*: matches a string that has an a followed by zero or more copies of the sequence bc;
- a(bc){1,5}: one through five copies of bc.

There's also the '|' symbol, which works as an OR operator:

- hi|hello: matches a string that has either hi or hello in it;
- (b|cd)ef: a string that has either bef or cdef;
- (a|b)*c: a string that has a sequence of alternating a's and b's ending in a c;

A period ('.') stands for any single character:

- a.[0-9]: matches a string that has an a followed by one character and a digit;
- ^.{3}$: a string with exactly 3 characters.

Bracket expressions specify which characters are allowed in a single position of a string:

- [ab]: matches a string that has either an a or a b (that's the same as a|b);
- [a-d]: a string that has lowercase letters 'a' through 'd' (that's equal to a|b|c|d and even [abcd]);
- ^[a-zA-Z]: a string that starts with a letter;
- [0-9]%: a string that has a single digit before a percent sign;
- ,[a-zA-Z0-9]$: a string that ends in a comma followed by an alphanumeric character.

You can also list the characters that do NOT want -- just use a '^' as the first symbol in a bracketed expression (i.e., %[^a-zA-Z]% matches a string with a character that is not a letter between two percent signs).

Do not forget that bracket expressions are an exception to that rule--inside them, all special characters, including the backslash ('\'), lose their special powers (i.e., [*\+?{}.] matches exactly any of the characters inside the brackets). To include a literal ']' in the list, make it the first character (following a possible '^'). To include a literal '-', make it the first or last character, or the second endpoint of a range.

Previous | Chapter Contents | Next Server & client versions compatibility