///////////////////////////////////////////////////////////////////////////////
// Name: wx/regex.h
// Purpose: regular expression matching
-// Author: Karsten Ballüder
+// Author: Karsten Ballueder
// Modified by: VZ at 13.07.01 (integrated to wxWin)
// Created: 05.02.2000
// RCS-ID: $Id$
-// Copyright: (c) 2000 Karsten Ballüder <ballueder@gmx.net>
+// Copyright: (c) 2000 Karsten Ballueder <ballueder@gmx.net>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_REGEX_H_
#define _WX_REGEX_H_
-#ifdef __GNUG__
- #pragma interface "regex.h"
-#endif
-
#include "wx/defs.h"
#if wxUSE_REGEX
+#include "wx/string.h"
+
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
-// max number of subexpression matches, the default should be big enough for
-// all uses but may be a bit wasteful
-#ifndef WX_REGEX_MAXMATCHES
- #define WX_REGEX_MAXMATCHES 1024
-#endif
-
// flags for regex compilation: these can be used with Compile()
enum
{
- // use extended regex syntax: default
+ // use extended regex syntax
wxRE_EXTENDED = 0,
+ // use advanced RE syntax (built-in regex only)
+#ifdef wxHAS_REGEX_ADVANCED
+ wxRE_ADVANCED = 1,
+#endif
+
// use basic RE syntax
wxRE_BASIC = 2,
wxRE_NEWLINE = 16,
// default flags
- wxRE_DEFAULT = wxRE_NOSUB | wxRE_EXTENDED
+ wxRE_DEFAULT = wxRE_EXTENDED
};
// flags for regex matching: these can be used with Matches()
// wxRegEx: a regular expression
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxRegExImpl;
+class WXDLLIMPEXP_FWD_BASE wxRegExImpl;
-class WXDLLEXPORT wxRegEx
+class WXDLLIMPEXP_BASE wxRegEx
{
public:
// default ctor: use Compile() later
(void)Compile(expr, flags);
}
- // return TRUE if this is a valid compiled regular expression
+ // return true if this is a valid compiled regular expression
bool IsValid() const { return m_impl != NULL; }
- // compile the string into regular expression, return TRUE if ok or FALSE
+ // compile the string into regular expression, return true if ok or false
// if string has a syntax error
bool Compile(const wxString& pattern, int flags = wxRE_DEFAULT);
// matches the precompiled regular expression against a string, return
- // TRUE if matches and FALSE otherwise
+ // true if matches and false otherwise
//
// flags may be combination of wxRE_NOTBOL and wxRE_NOTEOL
- bool Matches(const wxString& str, int flags = 0) const;
+ // len may be the length of text (ignored by most system regex libs)
+ //
+ // may only be called after successful call to Compile()
+ bool Matches(const wxString& text, int flags = 0) const;
+ bool Matches(const wxChar *text, int flags, size_t len) const
+ { return Matches(wxString(text, len), flags); }
// get the start index and the length of the match of the expression
// (index 0) or a bracketed subexpression (index != 0)
//
- // return FALSE if no match or on error
+ // may only be called after successful call to Matches()
+ //
+ // return false if no match or on error
bool GetMatch(size_t *start, size_t *len, size_t index = 0) const;
+ // return the part of string corresponding to the match, empty string is
+ // returned if match failed
+ //
+ // may only be called after successful call to Matches()
+ wxString GetMatch(const wxString& text, size_t index = 0) const;
+
+ // return the size of the array of matches, i.e. the number of bracketed
+ // subexpressions plus one for the expression itself, or 0 on error.
+ //
+ // may only be called after successful call to Compile()
+ size_t GetMatchCount() const;
+
// replaces the current regular expression in the string pointed to by
// pattern, with the text in replacement and return number of matches
// replaced (maybe 0 if none found) or -1 on error
- int Replace(wxString *str, const wxString& replacement) const;
+ //
+ // the replacement text may contain backreferences (\number) which will be
+ // replaced with the value of the corresponding subexpression in the
+ // pattern match
+ //
+ // maxMatches may be used to limit the number of replacements made, setting
+ // it to 1, for example, will only replace first occurrence (if any) of the
+ // pattern in the text while default value of 0 means replace all
+ int Replace(wxString *text, const wxString& replacement,
+ size_t maxMatches = 0) const;
+
+ // replace the first occurrence
+ int ReplaceFirst(wxString *text, const wxString& replacement) const
+ { return Replace(text, replacement, 1); }
+
+ // replace all occurrences: this is actually a synonym for Replace()
+ int ReplaceAll(wxString *text, const wxString& replacement) const
+ { return Replace(text, replacement, 0); }
// dtor not virtual, don't derive from this class
~wxRegEx();
// the real guts of this class
wxRegExImpl *m_impl;
+
+ // as long as the class wxRegExImpl is not ref-counted,
+ // instances of the handle wxRegEx must not be copied.
+ wxRegEx(const wxRegEx&);
+ wxRegEx &operator=(const wxRegEx&);
};
#endif // wxUSE_REGEX