Sample code for 30+ languages & platforms
PureBasic Requires Chilkat v11.1.0+

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