PureBasic
PureBasic
Regular Expression Replace Full Matches
See more Regular Expressions Examples
Demonstrates replacing the full matches of a regular expression.Note: Chilkat uses PCRE2. See PCRE2 Regular Expressions
Also see: PCRE2 Performance
Chilkat PureBasic Downloads
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"
Procedure ChilkatExample()
success.i = 0
success = 0
subject.s = "John Anders, +_+_+ Mary Robins $$$$"
pattern.s = "\w+\s+\w+"
sb.i = CkStringBuilder::ckCreate()
If sb.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkStringBuilder::ckAppend(sb,subject)
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::setCkEmitCompact(json, 0)
timeoutMs.i = 2000
numMatches.i = CkStringBuilder::ckRegexMatch(sb,pattern,json,timeoutMs)
If numMatches < 0
; Probably an error in the regular expression.
; Suggestion: Use AI to help create and/or diagnose regular expressions.
Debug CkStringBuilder::ckLastErrorText(sb)
CkStringBuilder::ckDispose(sb)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndIf
; Examine the matches:
Debug CkJsonObject::ckEmit(json)
; {
; "match": [
; {
; "group": [
; {
; "cap": "John Anders",
; "idx": 0,
; "len": 11
; }
; ]
; },
; {
; "group": [
; {
; "cap": "Mary Robins",
; "idx": 19,
; "len": 11
; }
; ]
; }
; ]
; }
sbTemp.i = CkStringBuilder::ckCreate()
If sbTemp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
i.i = 0
numMatches = CkJsonObject::ckSizeOfArray(json,"match")
While i < numMatches
CkJsonObject::setCkI(json, i)
; The full match is always in group 0.
CkStringBuilder::ckClear(sbTemp)
CkJsonObject::ckStringOfSb(json,"match[i].group[0].cap",sbTemp)
; Indicate that we wish to replace the full match with it's value converted to uppercase.
CkStringBuilder::ckToUppercase(sbTemp)
CkJsonObject::ckUpdateSb(json,"match[i].group[0].rep",sbTemp)
i = i + 1
Wend
; The JSON now has replacement strings:
Debug CkJsonObject::ckEmit(json)
; {
; "match": [
; {
; "group": [
; {
; "cap": "John Anders",
; "idx": 0,
; "len": 11,
; "rep": "JOHN ANDERS"
; }
; ]
; },
; {
; "group": [
; {
; "cap": "Mary Robins",
; "idx": 19,
; "len": 11,
; "rep": "MARY ROBINS"
; }
; ]
; }
; ]
; }
; Call RegexReplace to update the StringBuilder with the replacements.
success = CkStringBuilder::ckRegexReplace(sb,json)
If success = 0
Debug CkStringBuilder::ckLastErrorText(sb)
CkStringBuilder::ckDispose(sb)
CkJsonObject::ckDispose(json)
CkStringBuilder::ckDispose(sbTemp)
ProcedureReturn
EndIf
Debug "Result after doing replacements:"
Debug CkStringBuilder::ckGetAsString(sb)
; Result after doing replacements:
; JOHN ANDERS, +_+_+ MARY ROBINS $$$$
CkStringBuilder::ckDispose(sb)
CkJsonObject::ckDispose(json)
CkStringBuilder::ckDispose(sbTemp)
ProcedureReturn
EndProcedure