如何引用正则表达式字符串中的所有元字符

时间:2015-01-04 17:01:09

标签: erlang

我需要用其他字符串替换子字符串,而字符串中没有替换:,但在re:

但是,为了使用re:replace,我需要引用所有正则表达式特定的元字符,如[。等

在ocaml中,它被称为Str.quote。

 val quote : string -> string

 Str.quote s returns a regexp string that matches exactly s and nothing else.

来自http://caml.inria.fr/pub/docs/manual-ocaml/libref/Str.html

Erlang中调用的函数是什么?

2 个答案:

答案 0 :(得分:2)

您应该考虑将字符串转换为二进制文件并使用binary:replace/3,4,而不是引用正则表达式特殊字符。

答案 1 :(得分:0)

在Elixir中找到它,名为regex:escape。转换为Erlang它看起来像这样(需要查看unicode并返回二进制标志)。

escape(String) ->
    re:replace(String, "[.^$*+?()[{\\\|\s#]", "\\\\&",[global]).

http://elixir-lang.org/docs/stable/elixir/Regex.html#escape/1

{:ok, pattern} = :re.compile(~S"[.^$*+?()[{\\\|\s#]", [:unicode])
@escape_pattern pattern

def escape(string) when is_binary(string) do
    :re.replace(string, @escape_pattern, "\\\\&", [:global, {:return, :binary}])
end