Skip to content

Commit 337c040

Browse files
author
José Valim
committed
Don't ignore escape characters in regex
Signed-off-by: José Valim <[email protected]>
1 parent b4d465e commit 337c040

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

lib/elixir/lib/regex.ex

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -484,18 +484,13 @@ defmodule Regex do
484484
[List.to_integer(ns) | precompile_replacement(rest)]
485485
end
486486

487-
defp precompile_replacement(<<?\\, x, rest :: binary>>) when x < ?0 or x > ?9 do
488-
case precompile_replacement(rest) do
489-
[head | t] when is_binary(head) ->
490-
[<<x, head :: binary>> | t]
491-
other ->
492-
[<<x>> | other]
493-
end
487+
defp precompile_replacement(<<?\\, ?\\, rest :: binary>>) do
488+
[<<?\\>> | precompile_replacement(rest)]
494489
end
495490

496-
defp precompile_replacement(<<?\\, rest :: binary>>) when byte_size(rest) > 0 do
491+
defp precompile_replacement(<<?\\, x, rest :: binary>>) when x in ?0..?9 do
497492
{ns, rest} = pick_int(rest)
498-
[List.to_integer(ns) | precompile_replacement(rest)]
493+
[List.to_integer([x|ns]) | precompile_replacement(rest)]
499494
end
500495

501496
defp precompile_replacement(<<x, rest :: binary>>) do

lib/elixir/test/elixir/regex_test.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,11 @@ defmodule RegexTest do
197197
assert Regex.replace(~r(b), "abcbe", "d") == "adcde"
198198
assert Regex.replace(~r(b), "abcbe", "d", global: false) == "adcbe"
199199

200+
assert Regex.replace(~r/ /, "first third", "\\second\\") ==
201+
"first\\second\\third"
202+
assert Regex.replace(~r/ /, "first third", "\\\\second\\\\") ==
203+
"first\\second\\third"
204+
200205
assert Regex.replace(~r[a(b)c], "abcabc", fn -> "ac" end) == "acac"
201206
assert Regex.replace(~r[a(b)c], "abcabc", fn "abc" -> "ac" end) == "acac"
202207
assert Regex.replace(~r[a(b)c], "abcabc", fn "abc", "b" -> "ac" end) == "acac"

0 commit comments

Comments
 (0)