Skip to content

Commit 9679bed

Browse files
author
José Valim
committed
Revert "Don't ignore escape characters in regex"
This change will be on v1.1 only as it may break applications. This reverts commit 337c040.
1 parent b6c0045 commit 9679bed

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

lib/elixir/lib/regex.ex

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

487-
defp precompile_replacement(<<?\\, ?\\, rest :: binary>>) do
488-
[<<?\\>> | precompile_replacement(rest)]
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
489494
end
490495

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

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

lib/elixir/test/elixir/regex_test.exs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -197,11 +197,6 @@ 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-
205200
assert Regex.replace(~r[a(b)c], "abcabc", fn -> "ac" end) == "acac"
206201
assert Regex.replace(~r[a(b)c], "abcabc", fn "abc" -> "ac" end) == "acac"
207202
assert Regex.replace(~r[a(b)c], "abcabc", fn "abc", "b" -> "ac" end) == "acac"

0 commit comments

Comments
 (0)