|
|
Regex r1("(foo"); // invalid: unmatched (
Regex r2("*"); // invalid: missing operand for *
Regex r3("\ "); // invalid: trailing \ is invalid
The validity of a regular expression can be checked by a simple if-test.
Regex r("(foo");
if (!r)
cerr << "invalid: " << r.the_error() << endl;
This prints out ``unmatched (''.
An invalid Regex does not match anything:
Regex r("(foo");
r.match("foo"); // false
Invalid Regexes will normally result from an attempt to construct a Regex from a pattern supplied as input to the program. (Presumably, patterns constructed by the program itself should be correct.)
cout << "Give me a pattern, please: ";
String s;
cin >> s;
Regex r(s);
if (!r) {
cerr << "invalid: " << r.the_error() << endl;
// ...
In this situation, the programmer will probably want to loop until the user supplies a valid pattern.
cout << "Give me a pattern, please: ";
String s;
cin >> s;
Regex r(s);
while (!r) {
cerr << "invalid: " << r.the_error() << endl;
cerr << "Please give me a valid pattern: ";
cin >> s;
r.assign(s);
}
In the above, the statement
r.assign(s);
is equivalent to, but faster than, the assignment
r = Regex(s);