Working with regular expression
Regex utility
Fano Framework provides regex utility through IRegex interface.
IRegex = interface
['{E08AD12B-C606-48FF-A9FA-728EAB14AB35}']
function replace(
const regexPattern : string;
const source : string;
const replacement : string
) : string;
function quote(const regexPattern : string) : string;
function match(
const regexPattern : string;
const source : string
) : TRegexMatchResult;
function greedyMatch(
const regexPattern : string;
const source : string
) : TRegexMatchResult;
end;
Built-in IRegex implementation
Currently, Fano Framework provides TRegex class that implements IRegex interface which is a thin wrapper for Free Pascal built-in regex library (TRegExpr).
To create different IRegex implementation, just create new class that implement this interface.
Match string against regex pattern
To match string against regex pattern, you use match() or greedyMatch() method.
Former method stops as soon as it finds a match while latter try to match as many as possible.
They accept same parameters:
regexPatterncontains regular expression pattern to match.sourcecontains actual string to match.
They return TRegexMatchResult which is a record declared like so
TRegexMatches = array of array of string;
TRegexMatchResult = record
matched : boolean;
matches : TRegexMatches;
end;
matched field tells if there is a match and matched strings are in matches field which is empty array when matchedis false.
var
regex : IRegex;
matches : TRegexMatchResult;
...
regex := TRegex.create();
matches := regex.match('\[\[\s*([a-zA-Z0-9]*)\s*\]\]', 'This is [[ myVar ]]');
Above code matches string inside [[ ... ]] and will yield
matches.matched = true
matches.matches[0][0] = '[[ myVar ]]'
matches.matches[0][1] = 'myVar'
Replace string with regex pattern.
To replace string call replace() method. It accepts three parameters,
regexPatterncontains regex pattern to match.sourceis input stringreplacementis replacement
When it finds match, replacement wil replace matched string.
var
regex : IRegex;
newStr : string;
...
regex := TRegex.create();
newStr := regex.match('\[\[\s*([a-zA-Z0-9]*)\s*\]\]', 'This is [[ myVar ]]', 'cool');
Above code matches string inside [[ ... ]] and will yield
newStr = 'This is cool'