GRETA - How to use Regular Expressions in Visual C++ correctly

Introduction

GRETA gives you all the power of PERL 5 regular expressions in your C++ applications. This is the homepage of GRETA. Today, we will discuss neither regular expressions nor template classes in the GRETA library, because you can get familiar with them at the GRETA homepage. Here, I will explain how to add and build the GRETA library in Visual C++, step by step.

Download

Download GRETA's source code from GRETA homepage. For example: GRETA 2.6.4 for VC6, you will get 'greta-2.6.4-vc6.zip'. Or, you can download it from this site. Please do not download the *.lib file for GRETA (such as greta.lib etc.). You may find GRETA in the *.lib file from Microsoft. But greta.lib may not satisfy your needs. It may generate link errors.

Usage

GRETA library has six program files:

regexpr2.h

regexpr2.cpp

syntax2.h

syntax2.cpp

restack.h

reimpl2.h

Create a new 'Win32 Static Library' project for GRETA in your workspace:

Step 1: Create a blank workspace. For example, 'Test':

Step 2: Create the main project that will use GRETA. For example, 'Console' type 'Main':

Step 3: Create the GRETA project. Select 'Win32 Static Library' and make it a dependent of the Main project. After this, press the OK button, let the 'Pre-Compiled header' and 'MFC Support' remain unchecked:

Step 4: Copy those six program files from the GRETA zip package into the GRETA project's directory and add them to the project:

Step 5: Copy one of the example codes into the main() function. Change #include "regexpr2.h" to #include "..\greta\regexpr2.h". These examples are in the HTML file of the GRETA zip package. Select 'Main' project as the active project, then compile and run the project:

If your project uses Unicode or your main project is DLL type, please go on with the following.

Unicode version

If your project (which uses GRETA) is of Unicode version, you must make the GRETA project to be of Unicode version. For example:

Step 1: Add a 'Unicode Debug' configuration for your GRETA project:

Step 2: In the project settings, add '_UNICODE' and 'UNICODE' macros into the C++ general preprocessor definitions of the corresponding 'Unicode Debug' configuration:

Step 3: Repeat step 1 and step 2 for the 'Main' project as well as for 'Release' configuration.

You will get 'Unicode Debug' and 'Unicode Release' configurations for both GRETA and your main project.

Runtime library

In many cases, when your main project is DLL type, you must make sure that GRETA uses the same runtime library as your main project, or you will get a link error.

Step 1: To find out which runtime library your main project uses:

Step 2: Select the same runtime library for GRETA project. Now, you can link successfully.

Q: Why do we need to download greta.lib and why the downloaded greta.lib generates link error?

A: This is because of "Unicode version" and "Runtime library". Because it is not known whether the downloaded greta.lib is of Unicode version, and it is also not known which runtime library the downloaded greta.lib uses, so it may generate link errors.

Make sure the greta projcet setting is compatible with the main project.
I met the link error, after
1, select the correct the multithread DLL/ single thread DLL
2, select the correct unicode mode ( using or not using, the same with the main project)

hi
I am too bad with STL. I have to match "hello sudarshan hello" with pattern "hello". The code should return me hello 2 times with their positions.I am sorry that i am troubling you such small thing.But if u could write a small code snippet for this that would be great.Please help me.

Hi
I would like to get the pattern which is matched.No to just match it.
I am new to STL.If u could suggest me some link to learn STL then i would be greatful.Also if some link to some popular regular expressions would be appriciated.Also if u can write a greta documentaion that would be great!!.. Your code is great.

your bug:
the only one $ can also splits the string!
For Example:
My input: Text one\$$$Text two $$======$text three\\$$text four
The result should be:
Text one\$
Text two
======$text three\\
text four
but your result is:
Text one\$
Text two
======
text three\\
text four

My bug:
the result is:
Text one\$
Text two
======$text three\\$$text four

the "======$text three\\$$text four" also should be split like "======$text three\\" and "text four",since the first backslash escaped the second backslash.

I changed my pattern to MyNewPat( "(?<!(\\\\\\\\)*\\\\)\\$\\$",GLOBAL ). it means there are not odd backslash before double $. But it still does not work.