Sample code for 30+ languages & platforms
Visual FoxPro

Regular Expression with Capture Groups

See more Regular Expressions Examples

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

Demonstrates the following PCRE2 regular expression:

See the sample code below.

Name:\s+(\w+)\s+(\w+),\s+Email:\s+(\S+)

And apply it to this string:

Name: John Smith, Email: john.smith@example.com

Regex Components Explained

Part Meaning Matched Text
"Name:" Matches the literal text "Name:" "Name:"
"\s+" Matches one or more whitespace characters (spaces, tabs, etc.) (space)
"(\w+)" Capture Group 1: One or more word characters ("a-zA-Z0-9_") "John"
"\s+" More whitespace (space)
"(\w+)" Capture Group 2: Another word (the last name) "Smith"
"," A literal comma ","
"\s+" Whitespace again (space)
"Email:" Matches the literal "Email:" "Email:"
"\s+" Whitespace (space)
"(\S+)" Capture Group 3: One or more non-whitespace characters "john.smith@example.com"

Matches for Your Example String

String:

"Name: John Smith, Email: john.smith@example.com"

Regex Match Groups:

Group Captured Value
Group 1 "John"
Group 2 "Smith"
Group 3 "john.smith@example.com"

Notes on Character Classes

  • \w matches [a-zA-Z0-9_] — so it doesn’t include punctuation like a period.
  • \S matches any non-whitespace character, so it’s good for capturing an email.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL lcSubject
LOCAL lcPattern
LOCAL loSb
LOCAL loJson
LOCAL lnTimeoutMs
LOCAL lnNumMatches
LOCAL lcCap
LOCAL i
LOCAL lnMatchCount
LOCAL j
LOCAL lnNumCaptureGroups

lnSuccess = 0

lcSubject = "Name: John Smith, Email: john.smith@example.com"
lcPattern = "Name:\s+(\w+)\s+(\w+),\s+Email:\s+(\S+)"

loSb = CreateObject('Chilkat.StringBuilder')
loSb.Append(lcSubject)

loJson = CreateObject('Chilkat.JsonObject')
loJson.EmitCompact = 0

lnTimeoutMs = 2000
lnNumMatches = loSb.RegexMatch(lcPattern,loJson,lnTimeoutMs)
IF (lnNumMatches < 0) THEN
    * Probably an error in the regular expression.
    * Suggestion: Use AI to help create and/or diagnose regular expressions.
    ? loSb.LastErrorText
    RELEASE loSb
    RELEASE loJson
    CANCEL
ENDIF

* Examine the matches:
? loJson.Emit()

* This is the JSON with the match information.
* See the JSON parsing code below to get the matched capture group values.

* Important:  Capture group 0 always contains the entire match — that is, the portion of the input string that matches the full regular expression.

* {
*   "match": [
*     {
*       "group": [
*         {
*           "cap": "Name: John Smith, Email: john.smith@example.com",
*           "idx": 0,
*           "len": 47
*         },
*         {
*           "cap": "John",
*           "idx": 6,
*           "len": 4
*         },
*         {
*           "cap": "Smith",
*           "idx": 11,
*           "len": 5
*         },
*         {
*           "cap": "john.smith@example.com",
*           "idx": 25,
*           "len": 22
*         }
*       ]
*     }
*   ]
* }

i = 0
lnMatchCount = loJson.SizeOfArray("match")
DO WHILE i < lnMatchCount
    ? "Match " + STR(i + 1) + ":"
    loJson.I = i
    j = 0
    lnNumCaptureGroups = loJson.SizeOfArray("match[i].group")
    DO WHILE j < lnNumCaptureGroups
        loJson.J = j
        lcCap = loJson.StringOf("match[i].group[j].cap")
        ? STR(j) + ": " + lcCap
        j = j + 1
    ENDDO
    i = i + 1
ENDDO

* Capture group 0 always contains the entire match — that is, the portion of the input string that matches the full regular expression.

* Output

* Match 1:
* 0: Name: John Smith, Email: john.smith@example.com
* 1: John
* 2: Smith
* 3: john.smith@example.com

RELEASE loSb
RELEASE loJson