Lua Requires Chilkat v11.1.0+
Lua
Regular Expression with Multiple Matches and Capture Groups
See more Regular Expressions Examples
Demonstrates a regular expression with multiple matches and capture groups for each match.Note: Chilkat uses PCRE2. See PCRE2 Regular Expressions
Also see: PCRE2 Performance
Chilkat Lua Downloads
local chilkat = require("chilkat")
local success = false
local pattern = "Name:\\s+(\\w+)\\s+(\\w+),\\s+Email:\\s+(\\S+)"
local sb = chilkat.StringBuilder.new()
local crlf = true
sb:append_line("Name: John Smith, Email: john.smith@example.com", crlf)
sb:append_line("Name: Jack Johnson, Email: jack.johnson@example.com", crlf)
sb:append_line("Name: Mary Adams, Email: mary.adams@example.com", crlf)
print(sb:get_as_string())
-- We have the following string:
-- Name: John Smith, Email: john.smith@example.com
-- Name: Jack Johnson, Email: jack.johnson@example.com
-- Name: Mary Adams, Email: mary.adams@example.com
local json = chilkat.JsonObject.new()
json.emit_compact = false
local timeoutMs = 2000
local numMatches = sb:regex_match(pattern, json, timeoutMs)
if numMatches < 0 then
-- Probably an error in the regular expression.
-- Suggestion: Use AI to help create and/or diagnose regular expressions.
print(sb.last_error_text)
return
end
-- Examine the matches:
print(json:emit())
-- This is the JSON with the match information.
-- See the JSON parsing code below to get the matched capture group values.
-- {
-- "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
-- }
-- ]
-- },
-- {
-- "group": [
-- {
-- "cap": "Name: Jack Johnson, Email: jack.johnson@example.com",
-- "idx": 49,
-- "len": 51
-- },
-- {
-- "cap": "Jack",
-- "idx": 55,
-- "len": 4
-- },
-- {
-- "cap": "Johnson",
-- "idx": 60,
-- "len": 7
-- },
-- {
-- "cap": "jack.johnson@example.com",
-- "idx": 76,
-- "len": 24
-- }
-- ]
-- },
-- {
-- "group": [
-- {
-- "cap": "Name: Mary Adams, Email: mary.adams@example.com",
-- "idx": 102,
-- "len": 47
-- },
-- {
-- "cap": "Mary",
-- "idx": 108,
-- "len": 4
-- },
-- {
-- "cap": "Adams",
-- "idx": 113,
-- "len": 5
-- },
-- {
-- "cap": "mary.adams@example.com",
-- "idx": 127,
-- "len": 22
-- }
-- ]
-- }
-- ]
-- }
-- Important: Capture group 0 always contains the entire match — that is, the portion of the input string that matches the full regular expression.
local cap = ""
local i = 0
local matchCount = json:size_of_array("match")
while i < matchCount do
print("Match " .. (i + 1) .. ":")
json.i = i
local j = 0
local numCaptureGroups = json:size_of_array("match[i].group")
while j < numCaptureGroups do
json.j = j
cap = json:string_of("match[i].group[j].cap")
print(j .. ": " .. cap)
j = j + 1
end
i = i + 1
end
-- 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
-- Match 2:
-- 0: Name: Jack Johnson, Email: jack.johnson@example.com
-- 1: Jack
-- 2: Johnson
-- 3: jack.johnson@example.com
-- Match 3:
-- 0: Name: Mary Adams, Email: mary.adams@example.com
-- 1: Mary
-- 2: Adams
-- 3: mary.adams@example.com