| 1 | --- |
| 2 | # Advanced PCRE2 complex patterns test |
| 3 | # Tests complex named groups, nested patterns, edge cases |
| 4 | |
| 5 | pattern: | |
| 6 | (?x) # Extended mode |
| 7 | ^ |
| 8 | (?<timestamp>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z) \s+ |
| 9 | \[(?<thread_id>\d+)\] \s+ |
| 10 | (?<level>DEBUG|INFO|WARN|ERROR|FATAL) \s+ |
| 11 | (?<logger_name>[a-zA-Z0-9._-]+) \s+ - \s+ |
| 12 | (?<message> |
| 13 | (?:User \s+ (?<user_name>\w+) \s+)? # Optional user |
| 14 | (?:Action: \s+ (?<action>\w+) \s+)? # Optional action |
| 15 | (?:Resource: \s+ (?<resource>\S+) \s+)? # Optional resource |
| 16 | (?<description>.*) # Remaining message |
| 17 | ) |
| 18 | $ |
| 19 | |
| 20 | inject: |
| 21 | - key: LOG_PROCESSOR |
| 22 | value: "advanced-pcre2" |
| 23 | |
| 24 | rewrite: |
| 25 | # Test complex variable substitution with nested groups |
| 26 | - key: STRUCTURED_MESSAGE |
| 27 | value: "ts=${timestamp} level=${level} logger=${logger_name}" |
| 28 | inject: yes |
| 29 | |
| 30 | # Test conditional processing based on captured groups |
| 31 | - key: USER_ACTION |
| 32 | value: "${user_name}:${action}:${resource}" |
| 33 | inject: yes |
| 34 | |
| 35 | # Test processing optional groups (may be empty) |
| 36 | - key: HAS_USER |
| 37 | value: "checked" |
| 38 | inject: yes |
| 39 | |
| 40 | filename: |
| 41 | key: FILENAME |