PureBasic
PureBasic
Regular Expression with Named Capture Groups
See more Regular Expressions Examples
Demonstrates regular expressions with named capture groups.See the sample code below.
Note: Chilkat uses PCRE2. See PCRE2 Regular Expressions
Also see: PCRE2 Performance
In PCRE2, named capture groups allow you to assign a name to a capturing group, making it easier to reference by name instead of number.
Syntax
(?<name>pattern)
or
(?'name'pattern)
Example
(?<first>\w+)\s+(?<last>\w+)
Applied to:
"John Smith"
Produces:
first:Johnlast:Smith
Chilkat PureBasic Downloads
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"
Procedure ChilkatExample()
success.i = 0
subject.s = "John Smith"
pattern.s = "(?<first>\w+)\s+(?<last>\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)
; Here is the JSON showing the matches.
; Important: Capture group 0 always contains the entire match — that is, the portion of the input string that matches the full regular expression.
; {
; "named": {
; "first": 1,
; "last": 2
; },
; "match": [
; {
; "group": [
; {
; "cap": "John Smith",
; "idx": 0,
; "len": 10
; },
; {
; "cap": "John",
; "idx": 0,
; "len": 4
; },
; {
; "cap": "Smith",
; "idx": 5,
; "len": 5
; }
; ]
; }
; ]
; }
; The capture group index is obtained by looking up the name in the JSON result.
; For example:
CkJsonObject::setCkI(json, CkJsonObject::ckIntOf(json,"named.first"))
Debug "first: " + CkJsonObject::ckStringOf(json,"match[0].group[i].cap")
CkJsonObject::setCkI(json, CkJsonObject::ckIntOf(json,"named.last"))
Debug "last: " + CkJsonObject::ckStringOf(json,"match[0].group[i].cap")
; Output is:
; first: John
; last: Smith
CkStringBuilder::ckDispose(sb)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndProcedure