1 /**************************************************************************
2 ** (c) Copyright 2001, Andromeda Technology & Automation
3 ***************************************************************************
4 ** MODULE INFORMATION *
5 ***********************
6 ** FILE NAME : regex.cpp
7 ** SYSTEM NAME : Andromeda X-Windows Encapsulation
8 ** VERSION NUMBER : $Revision: 1.3 $
10 ** DESCRIPTION : regex class implementation.
15 ***************************************************************************
16 ** ADMINISTRATIVE INFORMATION *
17 ********************************
18 ** ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
19 ** CREATION DATE : Feb 23, 2001
20 ** LAST UPDATE : Mar 31, 2010
22 **************************************************************************/
24 /*****************************
26 Revision 1.3 2007/05/04 13:56:05 arjen
27 Added a copy contructor to the regex class. This prevents multiple frees in the destructor.
29 Revision 1.2 2002/09/28 06:45:51 arjen
30 New feature: subtring selection by regular expression.
31 Bugfix: use the std: namespace for STL classes istream and ostream
33 Revision 1.1 2002/07/25 08:01:27 arjen
34 First checkin, AXE release 0.2
36 *****************************/
38 static const char RCSID[] = "$Id: regex.cpp,v 1.3 2007/05/04 13:56:05 arjen Exp $";
44 // Constructors and destructors for the regex class
46 regex::regex(const String ®)
49 int error = regcomp (&expression, reg.p->s, REG_EXTENDED);
52 regex::regex(const char *reg)
55 int error = regcomp (&expression, reg, REG_EXTENDED);
58 regex::regex(const regex & reg)
60 original = reg.original;
61 int error = regcomp (&expression, reg.original, REG_EXTENDED);
69 regex& regex::operator=(const regex& x)
71 original = x.original;
72 int error = regcomp (&expression, x.original, REG_EXTENDED);
77 bool operator == (const String &s, const regex &r)
79 return regexec(&r.expression, s.p->s, 0, 0, 0) == 0;
81 bool operator == (const regex &r, const String &s)
83 return regexec(&r.expression, s.p->s, 0, 0, 0) == 0;
86 substring String::operator()(const regex &r)
95 if (regexec(&r.expression, p->s, 1, &match, 0) == 0)
97 sub.start = match.rm_so;
98 sub.len = match.rm_eo - match.rm_so;