Follow Me On...

Entries in Eclipse (1)

Tuesday
May202008

Eclipse RegEx Syntax & Capture Groups

Capture groups can be used to do the following:

Search Text: Blake Robertson
Find RegEx: (.*) (.*)
Replace RegEx: $2 $1
will change the text to: Robertson Blake
The $1 in the Replace RegEx matches to the first (.*) in the find expression and the $2 matches the second (.*)

 
More practical example… in my code i had a bunch of log statements like debug(“hello world\r\n”);  I was running low on program space in my PIC microprocessor and decided to replace them all with something like debugln(“hello world”); which saves us a whopping two bytes. 

If you want to replace a portion of line of code and you want to keep the actual print statement (the hello world part) you have to use a capture group.

Here’s the first regular expression i came up with:


FIND: debug\(\"(.*)\\r\\n"\);
REPLACE: debugln\(\"$1\"\);

This works and illustrates that whatever was originally in the (.*) will be inserted into the replacement string where the $1 is.

Here is the final FIND, REPLACE combo i came up with which would also work with a string which has additional printf style arguments and optional whitespace in various parts of the expression such as:
debug( “sum = %u\r\n”, x ) ;


FIND: debug\(\s*\"(.*)\\r\\n\"(.*)\)\s*;
REPLACE: debugln\(\"$1\"$2\);

Note: my replace expression eliminates any of the white space that was matched in the FIND expression.