Skip to content

feat(phase-13): String pattern matching engine#135

Merged
davydog187 merged 2 commits intomainfrom
phase-13-string-patterns
Feb 12, 2026
Merged

feat(phase-13): String pattern matching engine#135
davydog187 merged 2 commits intomainfrom
phase-13-string-patterns

Conversation

@davydog187
Copy link
Contributor

Summary

  • New Lua.VM.Stdlib.Pattern module implementing Lua's pattern language
  • Recursive backtracking matcher supporting all Lua pattern features
  • string.find, string.match, string.gmatch, string.gsub implementations

Test plan

  • Existing tests pass (1161 tests, 0 failures)
  • Pattern matching tests added (string.find, string.match, string.gmatch, string.gsub)
  • Pattern feature tests (character classes, quantifiers, anchors, sets, captures, lazy/greedy)

🤖 Generated with Claude Code

Dave Lucia and others added 2 commits February 11, 2026 17:10
Implement Lua's pattern matching language:
- Character classes (%a, %d, %l, %u, %w, %s, %p, %c)
- Quantifiers (*, +, -, ?)
- Anchors (^, $), sets ([abc], [^abc])
- Captures, backreferences (%1-%9), balanced match (%bxy)
- string.find, string.match, string.gmatch, string.gsub

Implements Phase 13 from plan.md
Add 16 property tests for the Pattern module covering:

find:
- Literal substrings found at valid positions
- Result positions are valid 1-based indices
- Anchored ^... patterns only match at position 1
- End anchor ...$ always matches at end of string

match:
- Captures are substrings of the subject
- Without captures returns the full match

gmatch:
- All matches are non-overlapping and in order
- Digit pattern matches are all digit-only strings

gsub:
- Replacing each char with itself (%0) is identity
- Count equals number of matches from gmatch
- max_n parameter limits replacements
- Replacing with empty string shortens result

Character class complementarity:
- %d and %D partition all characters
- %a and %A partition all characters
- %w and %W partition all characters
- %s and %S partition all characters

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@davydog187 davydog187 merged commit e10dada into main Feb 12, 2026
2 checks passed
@davydog187 davydog187 deleted the phase-13-string-patterns branch February 12, 2026 14:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant