diff options
author | Erik Terpstra <erterpstra@gmail.com> | 2020-06-23 15:08:06 +0200 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2020-06-25 14:31:57 +0100 |
commit | 70e513cf98a4d6f681e660f97813329d2ea74203 (patch) | |
tree | 86b20f8c3486add04a1f3e1a8a921db9d19eac2f /src/gleam_stdlib.erl | |
parent | 6b68e5e25006bc734345ce77ede14b6e54214d23 (diff) | |
download | gleam_stdlib-70e513cf98a4d6f681e660f97813329d2ea74203.tar.gz gleam_stdlib-70e513cf98a4d6f681e660f97813329d2ea74203.zip |
regex.split & regex.scan
Diffstat (limited to 'src/gleam_stdlib.erl')
-rw-r--r-- | src/gleam_stdlib.erl | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/gleam_stdlib.erl b/src/gleam_stdlib.erl index 47fbdb5..e89458b 100644 --- a/src/gleam_stdlib.erl +++ b/src/gleam_stdlib.erl @@ -11,7 +11,7 @@ string_pad/4, decode_tuple2/1, decode_map/1, bit_string_int_to_u32/1, bit_string_int_from_u32/1, bit_string_append/2, bit_string_part_/3, decode_bit_string/1, regex_from_string/1, regex_from_string_with/2, - regex_match/2, base_decoded4/1]). + regex_match/2, regex_split/2, regex_scan/2, base_decoded4/1]). should_equal(Actual, Expected) -> ?assertEqual(Expected, Actual). should_not_equal(Actual, Expected) -> ?assertNotEqual(Expected, Actual). @@ -190,6 +190,30 @@ regex_match(Regex, String) -> _ -> false end. +regex_split(Regex, String) -> + re:split(String, Regex). + +regex_submatches(String, {S, L}) -> + SubMatch = string:slice(String, S, L), + case string:is_empty(SubMatch) of + true -> none; + false -> {some, SubMatch} + end. + +regex_matches(String, [{S, L} | Submatches], Number) -> + {match, string:slice(String, S, L), S, Number, + lists:map(fun(X) -> regex_submatches(String, X) end, Submatches)}. + +regex_captured(_, [], _) -> []; +regex_captured(String, [ H | T ], Number) -> + [ regex_matches(String, H, Number) | regex_captured(String, T, Number + 1) ]. + +regex_scan(Regex, String) -> + case re:run(String, Regex, [global]) of + {match, Captured} -> regex_captured(String, Captured, 1); + _ -> [] + end. + base_decoded4(S) -> try {ok, base64:decode(S)} catch error:badarith -> {error, nil} |