X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e7208277c1ca5f3539427560ccedb2d619556d44..b3fcfa4d89d44425ed28050462c6064100fe7b05:/include/wx/regex.h diff --git a/include/wx/regex.h b/include/wx/regex.h index 5927f583f3..1656008c5a 100644 --- a/include/wx/regex.h +++ b/include/wx/regex.h @@ -12,7 +12,7 @@ #ifndef _WX_REGEX_H_ #define _WX_REGEX_H_ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma interface "regex.h" #endif @@ -20,21 +20,22 @@ #if wxUSE_REGEX +class WXDLLIMPEXP_BASE wxString; + // ---------------------------------------------------------------------------- // 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, @@ -51,7 +52,7 @@ enum 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() @@ -71,9 +72,9 @@ enum // wxRegEx: a regular expression // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxRegExImpl; +class WXDLLIMPEXP_BASE wxRegExImpl; -class WXDLLEXPORT wxRegEx +class WXDLLIMPEXP_BASE wxRegEx { public: // default ctor: use Compile() later @@ -97,18 +98,45 @@ public: // 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; + // + // may only be called after successful call to Compile() + bool Matches(const wxChar *text, int flags = 0) const; // get the start index and the length of the match of the expression // (index 0) or a bracketed subexpression (index != 0) // + // 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; + // 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 occurence (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 occurence + int ReplaceFirst(wxString *text, const wxString& replacement) const + { return Replace(text, replacement, 1); } + + // replace all occurences: 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(); @@ -119,6 +147,11 @@ private: // 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