diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2025-08-16 17:21:01 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2025-08-16 17:21:01 -0400 |
| commit | c72b0406a32ffc3f04324f7b6c321486762fca41 (patch) | |
| tree | 244e51c858890ea2ffb8c74a2c33c81b79de376e /lib/patterns/patterns.tm | |
| parent | 849fd423a759edf1b58b548a6148c177a6f8cd71 (diff) | |
Improved parsing and prefix/suffix matching using a `remainder`
parameter
Diffstat (limited to 'lib/patterns/patterns.tm')
| -rw-r--r-- | lib/patterns/patterns.tm | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/patterns/patterns.tm b/lib/patterns/patterns.tm index bab0c3dc..c5444b86 100644 --- a/lib/patterns/patterns.tm +++ b/lib/patterns/patterns.tm @@ -10,6 +10,12 @@ lang Pat return Pat.from_text("$n") extend Text + func matching_pattern(text:Text, pattern:Pat, pos:Int = 1 -> PatternMatch?) + result : PatternMatch + if C_code:Bool(Pattern$match_at(@text, @pattern, @pos, (void*)&@result)) + return result + return none + func matches_pattern(text:Text, pattern:Pat -> Bool) return C_code:Bool(Pattern$matches(@text, @pattern)) @@ -45,3 +51,16 @@ extend Text func trim_pattern(text:Text, pattern=$Pat"{space}", left=yes, right=yes -> Text) return C_code:Text(Pattern$trim(@text, @pattern, @left, @right)) + +func main() + >> "Hello world".matching_pattern($Pat'{id}') + >> "...Hello world".matching_pattern($Pat'{id}') +# func main(pattern:Pat, input=(/dev/stdin)) +# for line in input.by_line()! +# skip if not line.has_pattern(pattern) +# pos := 1 +# for match in line.by_pattern(pattern) +# say(line.slice(pos, match.index-1), newline=no) +# say("\033[34;1m$(match.text)\033[m", newline=no) +# pos = match.index + match.text.length +# say(line.from(pos), newline=yes) |
