代码之家  ›  专栏  ›  技术社区  ›  dina

elixir-替换unicode字符-PCRE不支持\L、\L、\N{name}、\U或\U

  •  2
  • dina  · 技术社区  · 8 年前

    我正在尝试从字符串中删除不可见的字符

    看见 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>"
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   dina    8 年前

    由于使用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>"