From b38686336d85a4185a15965d3287560a52f6afc6 Mon Sep 17 00:00:00 2001 From: poorna2152 Date: Thu, 26 Sep 2024 07:55:16 +0530 Subject: [PATCH] Add regexp find operations bbe --- examples/index.json | 7 +++ .../regexp_find_operations.bal | 55 +++++++++++++++++++ .../regexp_find_operations.md | 13 +++++ .../regexp_find_operations.metatags | 2 + .../regexp_find_operations.out | 23 ++++++++ 5 files changed, 100 insertions(+) create mode 100644 examples/regexp-find-operations/regexp_find_operations.bal create mode 100644 examples/regexp-find-operations/regexp_find_operations.md create mode 100644 examples/regexp-find-operations/regexp_find_operations.metatags create mode 100644 examples/regexp-find-operations/regexp_find_operations.out diff --git a/examples/index.json b/examples/index.json index 15332e6527..ca07da226a 100644 --- a/examples/index.json +++ b/examples/index.json @@ -1194,6 +1194,13 @@ "verifyBuild": true, "verifyOutput": true, "isLearnByExample": true + }, + { + "name": "RegExp find operations", + "url": "regexp-find-operations", + "verifyBuild": true, + "verifyOutput": true, + "isLearnByExample": true } ] }, diff --git a/examples/regexp-find-operations/regexp_find_operations.bal b/examples/regexp-find-operations/regexp_find_operations.bal new file mode 100644 index 0000000000..0879269e08 --- /dev/null +++ b/examples/regexp-find-operations/regexp_find_operations.bal @@ -0,0 +1,55 @@ +import ballerina/io; +import ballerina/lang.regexp; + +function printGroupsWithinLog(regexp:Groups logGroup) { + // The first element in the `logGroup` is the entire matched string. + // The subsequent elements in `logGroup` represent the captured groups + // (timestamp, component, message). + string timestamp = (logGroup[1]).substring(); + string component = (logGroup[2]).substring(); + string logMessage = (logGroup[3]).substring(); + + io:println(string `Timestamp: ${timestamp}`); + io:println(string `Component: ${component}`); + io:println(string `Message: ${logMessage}`); +} + +public function main() { + string logContent = string ` + 2024-09-19 10:02:01 WARN [UserLogin] - Failed login attempt for user: johndoe + 2024-09-19 10:03:17 ERROR [Database] - Connection to database timed out + 2024-09-19 10:04:05 WARN [RequestHandler] - Response time exceeded threshold for /api/v1/users + 2024-09-19 10:05:45 INFO [Scheduler] - Scheduled task started: Data backup + 2024-09-19 10:06:10 ERROR [Scheduler] - Failed to start data backup: Permission denied + 2024-09-19 10:11:55 INFO [Security] - Security scan completed, no issues found + 2024-09-19 10:12:30 ERROR [RequestHandler] - 404 Not Found: /api/v1/products`; + + // Regex to match error logs with three groups: + // 1. Timestamp (e.g., 2024-09-19 10:03:17). + // 2. Component (e.g., Database, Scheduler). + // 3. Log message (e.g., Connection to database timed out). + string:RegExp errorLogPattern = re `(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) ERROR \[(\w+)\] - (.*)`; + + // Retrieving the first error log from the `logContent`. + regexp:Span firstErrorLog = errorLogPattern.find(logContent); + io:println(string `First error log: ${firstErrorLog.substring()}`); + + // Retrieving all error logs from the `logContent`. + regexp:Span[] allErrorLogs = errorLogPattern.findAll(logContent); + io:println("All error logs:"); + foreach regexp:Span errorLog in allErrorLogs { + io:println(errorLog.substring()); + } + + // Retrieving groups (timestamp, component, message) from the first error log. + regexp:Groups firstErrorLogGroups = errorLogPattern.findGroups(logContent); + io:println("\nGroups within first error log:"); + printGroupsWithinLog(firstErrorLogGroups); + + // Retrieving groups from all error logs. + regexp:Groups[] allErrorLogGroups = errorLogPattern.findAllGroups(logContent); + io:println("\nGroups in all error logs"); + foreach regexp:Groups logGroup in allErrorLogGroups { + printGroupsWithinLog(logGroup); + } +} diff --git a/examples/regexp-find-operations/regexp_find_operations.md b/examples/regexp-find-operations/regexp_find_operations.md new file mode 100644 index 0000000000..00c62d1c5e --- /dev/null +++ b/examples/regexp-find-operations/regexp_find_operations.md @@ -0,0 +1,13 @@ +# RegExp find operations + +The `RegExp` type provides a set of language library functions to find patterns within strings. These functions enable efficient pattern matching, grouping, and extraction based on specific regular expressions. + + +::: code regexp_find_operations.bal ::: + +::: out regexp_find_operations.out ::: + +## Related links +- [RegExp type](/learn/by-example/regexp-type) +- [RegExp API Docs](https://lib.ballerina.io/ballerina/lang.regexp) +- [string API Docs](https://lib.ballerina.io/ballerina/lang.string) diff --git a/examples/regexp-find-operations/regexp_find_operations.metatags b/examples/regexp-find-operations/regexp_find_operations.metatags new file mode 100644 index 0000000000..a88701759c --- /dev/null +++ b/examples/regexp-find-operations/regexp_find_operations.metatags @@ -0,0 +1,2 @@ +description: This BBE demonstrates how to use the regexp langlib functions relevant to regex find operations. +keywords: ballerina, ballerina by example, bbe, regexp, RegExp, regex, regular expressions, ballerina regex functions, regexp langlib functions, find, findAll, findGroups, findAllGroups diff --git a/examples/regexp-find-operations/regexp_find_operations.out b/examples/regexp-find-operations/regexp_find_operations.out new file mode 100644 index 0000000000..5e9a9f4454 --- /dev/null +++ b/examples/regexp-find-operations/regexp_find_operations.out @@ -0,0 +1,23 @@ +$ bal run regexp_find_operations.bal +First error log: 2024-09-19 10:03:17 ERROR [Database] - Connection to database timed out +All error logs: +2024-09-19 10:03:17 ERROR [Database] - Connection to database timed out +2024-09-19 10:06:10 ERROR [Scheduler] - Failed to start data backup: Permission denied +2024-09-19 10:12:30 ERROR [RequestHandler] - 404 Not Found: /api/v1/products + +Groups within first error log: +Timestamp: 2024-09-19 10:03:17 +Component: Database +Message: Connection to database timed out + +Groups in all error logs +Timestamp: 2024-09-19 10:03:17 +Component: Database +Message: Connection to database timed out +Timestamp: 2024-09-19 10:06:10 +Component: Scheduler +Message: Failed to start data backup: Permission denied +Timestamp: 2024-09-19 10:12:30 +Component: RequestHandler +Message: 404 Not Found: /api/v1/products +➜