aboutsummaryrefslogtreecommitdiff
path: root/src/gleam_stdlib.erl
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2020-06-29 20:47:49 +0100
committerLouis Pilfold <louis@lpil.uk>2020-06-30 12:14:27 +0100
commitc8544e558b8b8e2b407ec9650d588401c944d20f (patch)
treeb390bdc5e5807bff7d3f07f22e8ed157584b32f1 /src/gleam_stdlib.erl
parent1ae8354d444013117abdde5987f734b3587592c4 (diff)
downloadgleam_stdlib-c8544e558b8b8e2b407ec9650d588401c944d20f.tar.gz
gleam_stdlib-c8544e558b8b8e2b407ec9650d588401c944d20f.zip
Alter regex API
Diffstat (limited to 'src/gleam_stdlib.erl')
-rw-r--r--src/gleam_stdlib.erl47
1 files changed, 19 insertions, 28 deletions
diff --git a/src/gleam_stdlib.erl b/src/gleam_stdlib.erl
index 85855d1..db2f6fd 100644
--- a/src/gleam_stdlib.erl
+++ b/src/gleam_stdlib.erl
@@ -10,8 +10,8 @@
string_pop_grapheme/1, string_starts_with/2, string_ends_with/2,
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, regex_split/2, regex_scan/2, base_decoded4/1]).
+ decode_bit_string/1, compile_regex/2, 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).
@@ -155,40 +155,31 @@ bit_string_part_(Bin, Pos, Len) ->
end.
bit_string_int_to_u32(I) when 0 =< I, I < 4294967296 ->
- {ok, <<I:32>>};
+ {ok, <<I:32>>};
bit_string_int_to_u32(_) ->
- {error, nil}.
+ {error, nil}.
bit_string_int_from_u32(<<I:32>>) ->
- {ok, I};
+ {ok, I};
bit_string_int_from_u32(_) ->
- {error, nil}.
-
-regex_from_string_with_opts(Options, String) ->
- case re:compile(String, Options) of
+ {error, nil}.
+
+compile_regex(String, Options) ->
+ {options, Caseless, Multiline} = Options,
+ OptionsList = [
+ unicode,
+ Caseless andalso caseless,
+ Multiline andalso multiline
+ ],
+ FilteredOptions = [Option || Option <- OptionsList, Option /= false],
+ case re:compile(String, FilteredOptions) of
{ok, MP} -> {ok, MP};
{error, {Str, Pos}} ->
- {error, {from_string_error, unicode:characters_to_binary(Str), Pos}}
- end.
-
-regex_from_string(String) ->
- regex_from_string_with_opts([unicode], String).
-
-regex_from_string_with(Options, String) ->
- OptList = case Options of
- {options, true, _} -> [unicode, caseless];
- _ -> [unicode]
- end,
- case Options of
- {options, _, true} -> regex_from_string_with_opts([multiline | OptList], String);
- _ -> regex_from_string_with_opts(OptList, String)
+ {error, {compile_error, unicode:characters_to_binary(Str), Pos}}
end.
regex_match(Regex, String) ->
- case re:run(String, Regex) of
- {match, _} -> true;
- _ -> false
- end.
+ re:run(String, Regex) /= nomatch.
regex_split(Regex, String) ->
re:split(String, Regex).
@@ -207,7 +198,7 @@ regex_matches(String, [{S, L} | Submatches]) ->
regex_scan(Regex, String) ->
case re:run(String, Regex, [global]) of
{match, Captured} -> lists:map(fun(X) -> regex_matches(String, X) end, Captured);
- _ -> []
+ nomatch -> []
end.
base_decoded4(S) ->