Commit 0fbaf4d
Regex builtins: re_match / re_find / re_find_all / re_replace / re_split
Third piece of the Python-ergonomics catch-up. Wraps the `regex`
crate (already a workspace dep) behind 5 OMC builtins covering the
common Python `re` module surface:
re_match(pattern, text) -> 0 or 1
Returns 1 if the pattern matches anywhere in text. Use ^/$ to
anchor. Compiles on every call (one-shot use cheap; for tight
loops, wrap+memoize at the OMC level).
re_find(pattern, text) -> string
First match as a string. Returns "" if no match (NOT null, for
easier downstream string-handling).
re_find_all(pattern, text) -> array of strings
All non-overlapping matches in order. Empty array if no matches.
re_replace(pattern, text, replacement) -> string
All matches replaced. Supports Rust regex's $1, $2, ${name}
backref syntax for capture-group substitution.
re_split(pattern, text) -> array of strings
Split at each match. Adjacent matches produce empty strings in
the output (Python's re.split semantics).
Tests (examples/tests/test_regex.omc — 10 tests, all pass):
- Basic match / anchored match / character class
- First find / find-all
- Replace literal / replace with backref-swap
- Split on whitespace / CSV-style split
- Edge: empty pattern matches everything, non-empty on empty text
Registered in:
- is_known_builtin matches!()
- HEAL_BUILTIN_NAMES (so heal pass doesn't flag them as typos)
- compiler type-tag: re_match returns int (JIT compatibility)
Regression: 8 exception + 10 f-string + 57 substrate + 70 builtins
+ 18 harmonic libs + 16 heal + 10 new regex = 189 OMC tests pass.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>1 parent 54c3714 commit 0fbaf4d
3 files changed
Lines changed: 151 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
182 | 182 | | |
183 | 183 | | |
184 | 184 | | |
| 185 | + | |
| 186 | + | |
185 | 187 | | |
186 | 188 | | |
187 | 189 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1914 | 1914 | | |
1915 | 1915 | | |
1916 | 1916 | | |
| 1917 | + | |
1917 | 1918 | | |
1918 | 1919 | | |
1919 | 1920 | | |
| |||
3099 | 3100 | | |
3100 | 3101 | | |
3101 | 3102 | | |
| 3103 | + | |
| 3104 | + | |
| 3105 | + | |
| 3106 | + | |
| 3107 | + | |
| 3108 | + | |
| 3109 | + | |
| 3110 | + | |
| 3111 | + | |
| 3112 | + | |
| 3113 | + | |
| 3114 | + | |
| 3115 | + | |
| 3116 | + | |
| 3117 | + | |
| 3118 | + | |
| 3119 | + | |
| 3120 | + | |
| 3121 | + | |
| 3122 | + | |
| 3123 | + | |
| 3124 | + | |
| 3125 | + | |
| 3126 | + | |
| 3127 | + | |
| 3128 | + | |
| 3129 | + | |
| 3130 | + | |
| 3131 | + | |
| 3132 | + | |
| 3133 | + | |
| 3134 | + | |
| 3135 | + | |
| 3136 | + | |
| 3137 | + | |
| 3138 | + | |
| 3139 | + | |
| 3140 | + | |
| 3141 | + | |
| 3142 | + | |
| 3143 | + | |
| 3144 | + | |
| 3145 | + | |
| 3146 | + | |
| 3147 | + | |
| 3148 | + | |
| 3149 | + | |
| 3150 | + | |
| 3151 | + | |
| 3152 | + | |
| 3153 | + | |
| 3154 | + | |
| 3155 | + | |
| 3156 | + | |
| 3157 | + | |
| 3158 | + | |
| 3159 | + | |
| 3160 | + | |
| 3161 | + | |
| 3162 | + | |
| 3163 | + | |
| 3164 | + | |
| 3165 | + | |
| 3166 | + | |
| 3167 | + | |
| 3168 | + | |
| 3169 | + | |
| 3170 | + | |
| 3171 | + | |
| 3172 | + | |
| 3173 | + | |
| 3174 | + | |
| 3175 | + | |
| 3176 | + | |
| 3177 | + | |
| 3178 | + | |
| 3179 | + | |
| 3180 | + | |
| 3181 | + | |
| 3182 | + | |
| 3183 | + | |
| 3184 | + | |
3102 | 3185 | | |
3103 | 3186 | | |
3104 | 3187 | | |
| |||
7771 | 7854 | | |
7772 | 7855 | | |
7773 | 7856 | | |
| 7857 | + | |
7774 | 7858 | | |
7775 | 7859 | | |
7776 | 7860 | | |
| |||
0 commit comments