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

Regular Expression with Multiple Matches and Named Capture Groups

See more Regular Expressions Examples

Demonstrates regular expressions with named capture groups and multiple matches.

Chilkat PHP Downloads

Chilkat2 PHP
<?php

use Chilkat2\JsonObject;
use Chilkat2\StringBuilder;

$sb = new StringBuilder();
$crlf = true;
$sb->AppendLine('Name: John Smith', $crlf);
$sb->AppendLine('Name: Jack Johnson', $crlf);
$sb->AppendLine('Name: Mary Adams', $crlf);

echo $sb->GetAsString(), "\n";

// We have the following string:
// Name: John Smith
// Name: Jack Johnson
// Name: Mary Adams

$pattern = 'Name:\s+(?<first>\w+)\s+(?<last>\w+)';
$json = new JsonObject();
$json->EmitCompact = false;

$timeoutMs = 2000;
$numMatches = $sb->RegexMatch($pattern, $json, $timeoutMs);
if ($numMatches < 0) {
    // Probably an error in the regular expression.
    // Suggestion: Use AI to help create and/or diagnose regular expressions.
    echo $sb->LastErrorText, "\n";
    exit;
}

// Examine the matches:
echo $json->Emit(), "\n";

// 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": "Name: John Smith",
//           "idx": 0,
//           "len": 16
//         },
//         {
//           "cap": "John",
//           "idx": 6,
//           "len": 4
//         },
//         {
//           "cap": "Smith",
//           "idx": 11,
//           "len": 5
//         }
//       ]
//     },
//     {
//       "group": [
//         {
//           "cap": "Name: Jack Johnson",
//           "idx": 18,
//           "len": 18
//         },
//         {
//           "cap": "Jack",
//           "idx": 24,
//           "len": 4
//         },
//         {
//           "cap": "Johnson",
//           "idx": 29,
//           "len": 7
//         }
//       ]
//     },
//     {
//       "group": [
//         {
//           "cap": "Name: Mary Adams",
//           "idx": 38,
//           "len": 16
//         },
//         {
//           "cap": "Mary",
//           "idx": 44,
//           "len": 4
//         },
//         {
//           "cap": "Adams",
//           "idx": 49,
//           "len": 5
//         }
//       ]
//     }
//   ]
// }

// The capture group index is obtained by looking up the name in the JSON result.
// For example:

$idx_first = $json->IntOf('named.first');
$idx_last = $json->IntOf('named.last');

$i = 0;
$matchCount = $json->SizeOfArray('match');
while ($i < $matchCount) {
    echo 'Match ', $i + 1, ":\n";
    $json->I = $i;

    $json->J = $idx_first;
    echo 'first: ', $json->StringOf('match[i].group[j].cap'), "\n";

    $json->J = $idx_last;
    echo 'first: ', $json->StringOf('match[i].group[j].cap'), "\n";

    echo "\n";
    $i = $i + 1;
}

// Output is:

// Match 1:
// first: John
// first: Smith
//
// Match 2:
// first: Jack
// first: Johnson
//
// Match 3:
// first: Mary
// first: Adams