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.2 $
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.2 2002-09-28 06:45:51 arjen
27 New feature: subtring selection by regular expression.
28 Bugfix: use the std: namespace for STL classes istream and ostream
30 Revision 1.1 2002/07/25 08:01:27 arjen
31 First checkin, AXE release 0.2
33 *****************************/
35 static const char RCSID[] = "$Id: regex.cpp,v 1.2 2002-09-28 06:45:51 arjen Exp $";
41 // Constructors and destructors for the regex class
43 regex::regex(const String ®)
45 regcomp (&expression, reg.p->s, REG_EXTENDED);
48 regex::regex(const char *reg)
50 regcomp (&expression, reg, REG_EXTENDED);
59 bool operator == (const String &s, const regex &r)
61 return regexec(&r.expression, s.p->s, 0, 0, 0) == 0;
63 bool operator == (const regex &r, const String &s)
65 return regexec(&r.expression, s.p->s, 0, 0, 0) == 0;
68 substring String::operator()(const regex &r)
77 if (regexec(&r.expression, p->s, 1, &match, 0) == 0)
79 sub.start = match.rm_so;
80 sub.len = match.rm_eo - match.rm_so;