Sample code for 30+ languages & platforms
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: John
  • last: Smith

Chilkat PureBasic Downloads

PureBasic
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