Since the "advanced" flavor is a superset of POSIX, why not use it?
I've done a test by modifying the minimal wx example. It really fails with the default flag "wxRE_EXTENDED", but it works like a charm, if I use the method "Compile" with "wxRE_ADVANCED". Here is the source of the test:
#include <wx/wx.h>
#include <wx/regex.h>
#include "mondrian.xpm"
const unsigned int wxID_TEST_REGEX = wxID_HIGHEST + 1;
// Declare the application class
class MyApp : public wxApp
{
public:
// Called on application startup
virtual bool OnInit();
};
// Declare our main frame class
class MyFrame : public wxFrame
{
public:
// Constructor
MyFrame(const wxString& title);
// Event handlers
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
void OnTestRegEx(wxCommandEvent& event);
private:
// This class handles events
DECLARE_EVENT_TABLE()
};
// Give wxWidgets the means to create a MyApp object
IMPLEMENT_APP(MyApp)
// Implements MyApp& wxGetApp()
DECLARE_APP(MyApp)
bool MyApp::OnInit()
{
// Create the main application window
MyFrame *frame = new MyFrame(wxT("Minimal wxWidgets App"));
// Show it
frame->Show(true);
// Start the event loop
return true;
}
MyFrame::MyFrame(const wxString& title)
: wxFrame(NULL, wxID_ANY, title)
{
// Set the frame icon
SetIcon(wxIcon(mondrian_xpm));
// Create a menu bar
wxMenu *fileMenu = new wxMenu;
// The "About" item should be in the help menu
wxMenu *helpMenu = new wxMenu;
helpMenu->Append(wxID_ABOUT, wxT("&About...\tF1"),
wxT("Show about dialog"));
fileMenu->Append(wxID_EXIT, wxT("E&xit\tAlt-X"),
wxT("Quit this program"));
fileMenu->Append(wxID_TEST_REGEX, wxT("&Test wxRegEx"),
wxT("Test wxRegEx"));
// Now append the freshly created menu to the menu bar...
wxMenuBar *menuBar = new wxMenuBar();
menuBar->Append(fileMenu, wxT("&File"));
menuBar->Append(helpMenu, wxT("&Help"));
// ... and attach this menu bar to the frame
SetMenuBar(menuBar);
// Create a status bar just for fun
CreateStatusBar(2);
SetStatusText(wxT("Welcome to wxWidgets!"));
}
// Event table for MyFrame
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
EVT_MENU(wxID_TEST_REGEX, MyFrame::OnTestRegEx)
END_EVENT_TABLE()
void MyFrame::OnAbout(wxCommandEvent& event)
{
wxString msg;
msg.Printf(wxT("Hello and welcome to %s"),
wxVERSION_STRING);
wxMessageBox(msg, wxT("About Minimal"),
wxOK | wxICON_INFORMATION, this);
}
void MyFrame::OnTestRegEx(wxCommandEvent& event)
{
wxString s = wxT("ababcbab");
wxRegEx rxTest;
if(!rxTest.Compile(wxT("(.*?)c"), wxRE_ADVANCED))
wxMessageBox(wxT("Compilation failed"), wxT("Error"),
wxOK | wxICON_ERROR, this);
else
{
rxTest.Replace(&s, wxT("\\1"));
wxMessageBox(s, wxT("Success"),
wxOK | wxICON_INFORMATION, this);
}
}
void MyFrame::OnQuit(wxCommandEvent& event)
{
// Destroy the frame
Close();
}
Edit:Sorry, I forgot to say, what system and wx versions I used for the test:
Windows XP SP2
wxWidgets-2.6.3 (unicode-monodll)
wxWidgets-2.8.0 RC1 (unicode-monodll)
The test is maybe more clear by using the following code (it will get all befor the first "c", i. e. "abab"):
wxString s = wxT("ababcbacab");
wxRegEx rxTest;
if(!rxTest.Compile(wxT("(.*?)c.*$"), wxRE_ADVANCED))
wxMessageBox(wxT("Compilation failed"), wxT("Error"),
wxOK | wxICON_ERROR, this);
else
{
rxTest.Replace(&s, wxT("\\1"));
wxMessageBox(s, wxT("Success"),
wxOK | wxICON_INFORMATION, this);
}