我正在尝试从字符串
中删除不可见的字符请参阅remove-zero-width-space-characters
iex> str = "\uFEFF<?xml>"
iex> String.replace(str, ~r/[\u200B\u200C\u200D\uFEFF]/, "")
** (Regex.CompileError) PCRE does not support \L, \l, \N{name}, \U, or \u at position 1
(elixir) lib/regex.ex:171: Regex.compile!/2
(elixir) expanding macro: Kernel.sigil_r/2
iex:44: (file)
错误:
PCRE does not support \L, \l, \N{name}, \U, or \u at position 1
如何实现上述正则表达式?
注意:当使用字符串而不是正则表达式时它可以工作,但为了代码效率,我想使用正则表达式
iex(34)> String.replace(a, "\uFEFF", "")
"<?xml>"
答案 0 :(得分:2)
由于您使用PCRE匹配不可见字符,请使用\p{C}
属性。这包括所有不可见的字符。对于您的情况,错误是由于使用的符号。 PCRE不支持\uXXXX
,但应设置\x{XXXX}
和u
标记。
/[\x{200B}\x{200C}\x{200D}\x{FEFF}]/u
代码:
iex(33)> str = "\uFEFF<?xml>"
iex(34)> String.replace(str, ~r/[\x{200B}\x{200C}\x{200D}\x{FEFF}]/u, "")
"<?xml>"