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.5 $
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 : Feb 23, 2001
22 **************************************************************************/
24 /*****************************
26 Revision 1.5 2010-12-30 12:04:02 arjen
27 Added regex assignment operator
29 Revision 1.3 2007-05-04 13:56:05 arjen
30 Added a copy contructor to the regex class. This prevents multiple frees in the destructor.
32 Revision 1.2 2002/09/28 06:45:51 arjen
33 New feature: subtring selection by regular expression.
34 Bugfix: use the std: namespace for STL classes istream and ostream
36 Revision 1.1 2002/07/25 08:01:27 arjen
37 First checkin, AXE release 0.2
39 *****************************/
41 static const char RCSID[] = "$Id: regex.cpp,v 1.5 2010-12-30 12:04:02 arjen Exp $";
47 // Constructors and destructors for the regex class
49 regex::regex(const String ®)
52 regcomp (&expression, reg.p->s, REG_EXTENDED);
55 regex::regex(const char *reg)
58 regcomp (&expression, reg, REG_EXTENDED);
61 regex::regex(const regex & reg)
63 original = reg.original;
64 regcomp (&expression, reg.original, REG_EXTENDED);
73 bool operator == (const String &s, const regex &r)
75 return regexec(&r.expression, s.p->s, 0, 0, 0) == 0;
77 bool operator == (const regex &r, const String &s)
79 return regexec(&r.expression, s.p->s, 0, 0, 0) == 0;
82 substring String::operator()(const regex &r)
91 if (regexec(&r.expression, p->s, 1, &match, 0) == 0)
93 sub.start = match.rm_so;
94 sub.len = match.rm_eo - match.rm_so;