Sample code for 30+ languages & platforms
Swift

Regular Expression Replace Capture Groups

See more Regular Expressions Examples

Demonstrates replacing capture groups for a regular expression.

Note: Chilkat uses PCRE2. See PCRE2 Regular Expressions
Also see: PCRE2 Performance

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

    var subject: String? = "John Anders, +_+_+ Mary Robins $$$$"
    var pattern: String? = "(?<first>\\w+)\\s+(?<last>\\w+)"

    let sb = CkoStringBuilder()!
    sb.append(value: subject)

    let json = CkoJsonObject()!
    json.emitCompact = false

    var timeoutMs: Int = 2000
    var numMatches: Int = sb.regexMatch(pattern: pattern, json: json, timeoutMs: timeoutMs).intValue
    if numMatches < 0 {
        // Probably an error in the regular expression.
        // Suggestion: Use AI to help create and/or diagnose regular expressions.
        print("\(sb.lastErrorText!)")
        return
    }

    // Examine the matches:
    print("\(json.emit()!)")

    // There are 2 matches:

    // {
    //   "named": {
    //     "first": 1,
    //     "last": 2
    //   },
    //   "match": [
    //     {
    //       "group": [
    //         {
    //           "cap": "John Anders",
    //           "idx": 0,
    //           "len": 11
    //         },
    //         {
    //           "cap": "John",
    //           "idx": 0,
    //           "len": 4
    //         },
    //         {
    //           "cap": "Anders",
    //           "idx": 5,
    //           "len": 6
    //         }
    //       ]
    //     },
    //     {
    //       "group": [
    //         {
    //           "cap": "Mary Robins",
    //           "idx": 19,
    //           "len": 11
    //         },
    //         {
    //           "cap": "Mary",
    //           "idx": 19,
    //           "len": 4
    //         },
    //         {
    //           "cap": "Robins",
    //           "idx": 24,
    //           "len": 6
    //         }
    //       ]
    //     }
    //   ]
    // }

    // To replace capture groups, write code to examine each capture group within
    // each match, and provide a replacement string.
    // Then call RegexReplace.

    // For example, let's capitalize the first names, and add append "on" to the last name.
    // After doing replacements, we should get:  JOHN Anderson, +_+_+ MARY Robinson $$$$

    var firstNameIdx: Int = json.int(of: "named.first").intValue
    var lastNameIdx: Int = json.int(of: "named.last").intValue

    let sbTemp = CkoStringBuilder()!

    var i: Int = 0
    numMatches = json.size(ofArray: "match").intValue
    while i < numMatches {

        json.i = i

        // The replacement string for the first name will be all uppercase.
        json.j = firstNameIdx
        sbTemp.clear()
        json.string(ofSb: "match[i].group[j].cap", sb: sbTemp)
        sbTemp.toUppercase()
        json.updateSb(jsonPath: "match[i].group[j].rep", sb: sbTemp)

        // Append "on" to the last name.
        json.j = lastNameIdx
        sbTemp.clear()
        json.string(ofSb: "match[i].group[j].cap", sb: sbTemp)
        sbTemp.append(value: "on")
        json.updateSb(jsonPath: "match[i].group[j].rep", sb: sbTemp)

        i = i + 1
    }

    // The JSON now has replacement strings:
    print("\(json.emit()!)")

    // {
    //   "named": {
    //     "first": 1,
    //     "last": 2
    //   },
    //   "match": [
    //     {
    //       "group": [
    //         {
    //           "cap": "John Anders",
    //           "idx": 0,
    //           "len": 11
    //         },
    //         {
    //           "cap": "John",
    //           "idx": 0,
    //           "len": 4,
    //           "rep": "JOHN"
    //         },
    //         {
    //           "cap": "Anders",
    //           "idx": 5,
    //           "len": 6,
    //           "rep": "Anderson"
    //         }
    //       ]
    //     },
    //     {
    //       "group": [
    //         {
    //           "cap": "Mary Robins",
    //           "idx": 19,
    //           "len": 11
    //         },
    //         {
    //           "cap": "Mary",
    //           "idx": 19,
    //           "len": 4,
    //           "rep": "MARY"
    //         },
    //         {
    //           "cap": "Robins",
    //           "idx": 24,
    //           "len": 6,
    //           "rep": "Robinson"
    //         }
    //       ]
    //     }
    //   ]
    // }

    // Call RegexReplace to update the StringBuilder with the replacements.
    success = sb.regexReplace(json: json)
    if success == false {
        print("\(sb.lastErrorText!)")
        return
    }

    print("Result after doing replacements:")
    print("\(sb.getAsString()!)")

    // Result after doing replacements:
    // JOHN Anderson, +_+_+ MARY Robinson $$$$

}