[stackoverflow] [progress Openedge Abl] How Do I Replace All Instances In A String Using...

Status
Not open for further replies.
J

Johan Vergeer

Guest
I would like to use a regular expression in OpenEdge to replace parts of a string.

In this case we want to replace SQL expressions with a symbol (now we use ?).

So what I have so far is this:

USING Progress.Lang.*.
USING System.Text.RegularExpressions.*.

BLOCK-LEVEL ON ERROR UNDO, THROW.

CLASS TOOLS.externals.TextSanitizer:

CONSTRUCTOR PUBLIC TextSanitizer ( ):
SUPER ().

END CONSTRUCTOR.

METHOD PUBLIC CHARACTER SanitizeSql( INPUT pInputText AS CHARACTER ):

DEFINE VARIABLE RESULT AS CHARACTER NO-UNDO.
DEFINE VARIABLE regexp AS Regex NO-UNDO.

regexp = NEW Regex("^((INSERT)\s+(INTO).*((VALUES)|(SELECT))|(SELECT).*(FROM)|(UPDATE).*(SET)|(DELETE)\s+(FROM)|((CREATE)|(DROP)|(TRUNCATE)|(ALTER)|(MODIFY))\s+((INDEX)|(TABLE)|(DATABASE)|(COLUMN)|(VIEW)))$").

RESULT = regexp:Replace(pInputText, "?").

DELETE OBJECT regexp.

RETURN RESULT.

END METHOD.

END CLASS.


And I wrote a procedure to run some tests:

BLOCK-LEVEL ON ERROR UNDO, THROW.

USING TOOLS.externals.TextSanitizer.

DEFINE VARIABLE textSanitizer AS TextSanitizer NO-UNDO.

textSanitizer = NEW TextSanitizer().
MESSAGE textSanitizer:SanitizeSql("SELECT * FROM") VIEW-AS ALERT-BOX.

RETURN.

Continue reading...
 
Status
Not open for further replies.
Top