>>? PATTERNTRAN("1st-title: ANAME-HER : 3520931 place[21-22]", "\[.*-.*\]",".","-") >> >>* A function to translate a pattern with a string >>* Arguments as main arguments in STRTRAN >>* A fourth optional argument allows to replace inside the match, only >>FUNCTION PATTERNTRAN (tcSearched AS String, tcPatternSought AS String, tcReplacement AS String, tcSoughtInMatch AS String) >> >> LOCAL lcTranslated AS String >> LOCAL lcTranslatedMatch AS String >> >> * load regular expression engine >> IF !"\_REGEXP.VCX" $ SET("Classlib") >> SET CLASSLIB TO (ADDBS(HOME(1)) + "ffc\_regexp.vcx") ADDITIVE >> ENDIF >> >> LOCAL loRegExpr AS _regexp >> >> m.loRegExpr = CREATEOBJECT("_regexp") >> m.loRegExpr.Pattern = m.tcPatternSought >> >> * check if there is a match >> IF m.loRegExpr.Execute(m.tcSearched,.F.) = 1 >> >> * if we want to replace inside the match, only >> IF PCOUNT() = 4 >> * perform a standard translation inside the match >> m.lcTranslatedMatch = STRTRAN(m.loRegExpr.Matches[1,2], m.tcSoughtInMatch, m.tcReplacement) >> * and then apply the translation to the match inside the original string >> m.lcTranslated = STRTRAN(m.tcSearched, m.loRegExpr.Matches[1,2], m.lcTranslatedMatch) >> ELSE >> * otherwise, just replace the match with the replacement >> m.lcTranslated = STRTRAN(m.tcSearched, m.loRegExpr.Matches[1,2], m.tcReplacement) >> ENDIF >> >> ELSE >> >> * with no pattern found, the string is returned unstranslated >> m.lcTranslated = m.tcSearched >> >> ENDIF >> >> RETURN m.lcTranslated >> >>ENDFUNC >>