git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29301 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			232 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			232 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | |
| %% Name:        regex.tex
 | |
| %% Purpose:     wxRegEx documentation
 | |
| %% Author:      Vadim Zeitlin
 | |
| %% Modified by:
 | |
| %% Created:     14.07.01
 | |
| %% RCS-ID:      $Id$
 | |
| %% Copyright:   (c) 2001 Vadim Zeitlin
 | |
| %% License:     wxWidgets license
 | |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | |
| 
 | |
| \section{\class{wxRegEx}}\label{wxregex}
 | |
| 
 | |
| wxRegEx represents a regular expression.  This class provides support
 | |
| for regular expressions matching and also replacement.
 | |
| 
 | |
| It is built on top of either the system library (if it has support
 | |
| for POSIX regular expressions - which is the case of the most modern
 | |
| Unices) or uses the built in Henry Spencer's library.  Henry Spencer
 | |
| would appreciate being given credit in the documentation of software
 | |
| which uses his library, but that is not a requirement.
 | |
| 
 | |
| Regular expressions, as defined by POSIX, come in two flavours: {\it extended}
 | |
| and {\it basic}.  The builtin library also adds a third flavour
 | |
| of expression \helpref{advanced}{wxresyn}, which is not available
 | |
| when using the system library.
 | |
| 
 | |
| Unicode is fully supported only when using the builtin library.
 | |
| When using the system library in Unicode mode, the expressions and data
 | |
| are translated to the default 8-bit encoding before being passed to
 | |
| the library.
 | |
| 
 | |
| On platforms where a system library is available, the default is to use
 | |
| the builtin library for Unicode builds, and the system library otherwise.
 | |
| It is possible to use the other if preferred by selecting it when building
 | |
| the wxWidgets.
 | |
| 
 | |
| \wxheading{Derived from}
 | |
| 
 | |
| No base class
 | |
| 
 | |
| \wxheading{Data structures}
 | |
| 
 | |
| Flags for regex compilation to be used with \helpref{Compile()}{wxregexcompile}:
 | |
| 
 | |
| \begin{verbatim}
 | |
| enum
 | |
| {
 | |
|     // 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,
 | |
| 
 | |
|     // ignore case in match
 | |
|     wxRE_ICASE    = 4,
 | |
| 
 | |
|     // only check match, don't set back references
 | |
|     wxRE_NOSUB    = 8,
 | |
| 
 | |
|     // if not set, treat '\n' as an ordinary character, otherwise it is
 | |
|     // special: it is not matched by '.' and '^' and '$' always match
 | |
|     // after/before it regardless of the setting of wxRE_NOT[BE]OL
 | |
|     wxRE_NEWLINE  = 16,
 | |
| 
 | |
|     // default flags
 | |
|     wxRE_DEFAULT  = wxRE_EXTENDED
 | |
| }
 | |
| \end{verbatim}
 | |
| 
 | |
| Flags for regex matching to be used with \helpref{Matches()}{wxregexmatches}.
 | |
| 
 | |
| These flags are mainly useful when doing several matches in a long string
 | |
| to prevent erroneous matches for {\tt '\textasciicircum'} and {\tt '\$'}:
 | |
| 
 | |
| \begin{verbatim}
 | |
| enum
 | |
| {
 | |
|     // '^' doesn't match at the start of line
 | |
|     wxRE_NOTBOL = 32,
 | |
| 
 | |
|     // '$' doesn't match at the end of line
 | |
|     wxRE_NOTEOL = 64
 | |
| }
 | |
| \end{verbatim}
 | |
| 
 | |
| \wxheading{Examples}
 | |
| 
 | |
| A bad example of processing some text containing email addresses (the example
 | |
| is bad because the real email addresses can have more complicated form than
 | |
| {\tt user@host.net}):
 | |
| 
 | |
| \begin{verbatim}
 | |
| wxString text;
 | |
| ...
 | |
| wxRegEx reEmail = wxT("([^@]+)@([[:alnum:].-_].)+([[:alnum:]]+)");
 | |
| if ( reEmail.Matches(text) )
 | |
| {
 | |
|     wxString text = reEmail.GetMatch(email);
 | |
|     wxString username = reEmail.GetMatch(email, 1);
 | |
|     if ( reEmail.GetMatch(email, 3) == wxT("com") ) // .com TLD?
 | |
|     {
 | |
|         ...
 | |
|     }
 | |
| }
 | |
| 
 | |
| // or we could do this to hide the email address
 | |
| size_t count = reEmail.ReplaceAll(text, wxT("HIDDEN@\\2\\3"));
 | |
| printf("text now contains %u hidden addresses", count);
 | |
| \end{verbatim}
 | |
| 
 | |
| \latexignore{\rtfignore{\wxheading{Members}}}
 | |
| 
 | |
| \membersection{wxRegEx::wxRegEx}\label{wxregexwxregex}
 | |
| 
 | |
| \func{}{wxRegEx}{\void}
 | |
| 
 | |
| Default ctor: use \helpref{Compile()}{wxregexcompile} later.
 | |
| 
 | |
| \func{}{wxRegEx}{\param{const wxString\& }{expr}, \param{int }{flags = wxRE\_DEFAULT}}
 | |
| 
 | |
| Create and compile the regular expression, use 
 | |
| \helpref{IsValid}{wxregexisvalid} to test for compilation errors.
 | |
| 
 | |
| \membersection{wxRegEx::\destruct{wxRegEx}}\label{wxregexdtor}
 | |
| 
 | |
| \func{}{\destruct{wxRegEx}}{\void}
 | |
| 
 | |
| dtor not virtual, don't derive from this class
 | |
| 
 | |
| \membersection{wxRegEx::Compile}\label{wxregexcompile}
 | |
| 
 | |
| \func{bool}{Compile}{\param{const wxString\& }{pattern}, \param{int }{flags = wxRE\_DEFAULT}}
 | |
| 
 | |
| Compile the string into regular expression, return {\tt true} if ok or {\tt false} 
 | |
| if string has a syntax error.
 | |
| 
 | |
| \membersection{wxRegEx::IsValid}\label{wxregexisvalid}
 | |
| 
 | |
| \constfunc{bool}{IsValid}{\void}
 | |
| 
 | |
| Return {\tt true} if this is a valid compiled regular expression, {\tt false} 
 | |
| otherwise.
 | |
| 
 | |
| \membersection{wxRegEx::GetMatch}\label{wxregexgetmatch}
 | |
| 
 | |
| \constfunc{bool}{GetMatch}{\param{size\_t* }{start}, \param{size\_t* }{len}, \param{size\_t }{index = 0}}
 | |
| 
 | |
| Get the start index and the length of the match of the expression
 | |
| (if {\it index} is $0$) or a bracketed subexpression ({\it index} different
 | |
| from $0$).
 | |
| 
 | |
| May only be called after successful call to \helpref{Matches()}{wxregexmatches} 
 | |
| and only if {\tt wxRE\_NOSUB} was {\bf not} used in 
 | |
| \helpref{Compile()}{wxregexcompile}.
 | |
| 
 | |
| Returns {\tt false} if no match or if an error occured.
 | |
| 
 | |
| \constfunc{wxString}{GetMatch}{\param{const wxString\& }{text}, \param{size\_t }{index = 0}}
 | |
| 
 | |
| Returns the part of string corresponding to the match where {\it index} is
 | |
| interpreted as above. Empty string is returned if match failed
 | |
| 
 | |
| May only be called after successful call to \helpref{Matches()}{wxregexmatches} 
 | |
| and only if {\tt wxRE\_NOSUB} was {\bf not} used in 
 | |
| \helpref{Compile()}{wxregexcompile}.
 | |
| 
 | |
| \membersection{wxRegEx::GetMatchCount}\label{wxregexgetmatchcount}
 | |
| 
 | |
| \constfunc{size\_t}{GetMatchCount}{\void}
 | |
| 
 | |
| Returns 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 \helpref{Compile()}{wxregexcompile}.
 | |
| and only if {\tt wxRE\_NOSUB} was {\bf not} used.
 | |
| 
 | |
| \membersection{wxRegEx::Matches}\label{wxregexmatches}
 | |
| 
 | |
| \constfunc{bool}{Matches}{\param{const wxChar* }{text}, \param{int }{flags = 0}}
 | |
| 
 | |
| Matches the precompiled regular expression against the string {\it text},
 | |
| returns {\tt true} if matches and {\tt false} otherwise.
 | |
| 
 | |
| Flags may be combination of {\tt wxRE\_NOTBOL} and {\tt wxRE\_NOTEOL}.
 | |
| 
 | |
| May only be called after successful call to \helpref{Compile()}{wxregexcompile}.
 | |
| 
 | |
| \membersection{wxRegEx::Replace}\label{wxregexreplace}
 | |
| 
 | |
| \constfunc{int}{Replace}{\param{wxString* }{text}, \param{const wxString\& }{replacement}, \param{size\_t }{maxMatches = 0}}
 | |
| 
 | |
| Replaces the current regular expression in the string pointed to by
 | |
| {\it text}, with the text in {\it replacement} and return number of matches
 | |
| replaced (maybe $0$ if none found) or $-1$ on error.
 | |
| 
 | |
| The replacement text may contain back references {\tt $\backslash$number} which will be
 | |
| replaced with the value of the corresponding subexpression in the
 | |
| pattern match. {\tt $\backslash$0} corresponds to the entire match and {\tt \&} is a
 | |
| synonym for it. Backslash may be used to quote itself or {\tt \&} character.
 | |
| 
 | |
| {\it 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.
 | |
| 
 | |
| \membersection{wxRegEx::ReplaceAll}\label{wxregexreplaceall}
 | |
| 
 | |
| \constfunc{int}{ReplaceAll}{\param{wxString* }{text}, \param{const wxString\& }{replacement}}
 | |
| 
 | |
| Replace all occurrences: this is actually a synonym for 
 | |
| \helpref{Replace()}{wxregexreplace}.
 | |
| 
 | |
| \wxheading{See also}
 | |
| 
 | |
| \helpref{ReplaceFirst}{wxregexreplacefirst}
 | |
| 
 | |
| \membersection{wxRegEx::ReplaceFirst}\label{wxregexreplacefirst}
 | |
| 
 | |
| \constfunc{int}{ReplaceFirst}{\param{wxString* }{text}, \param{const wxString\& }{replacement}}
 | |
| 
 | |
| Replace the first occurrence.
 | |
| 
 | |
| \wxheading{See also}
 | |
| 
 | |
| \helpref{Replace}{wxregexreplace}
 | |
| 
 |