【问题标题】:RegEx special char "|" escaping in Java正则表达式特殊字符“|”在 Java 中转义
【发布时间】:2013-09-22 15:50:11
【问题描述】:

我正在尝试拆分一个字符串,例如:abc|aa|| 当我使用常规 string.split 时,我需要提供正则表达式。 我尝试执行以下操作: string.split("|") string.split("\|") string.split("/|") string.split("\Q|\E")

它们都不起作用.....

有人知道如何让它工作吗?

【问题讨论】:

  • 试试string.split("\\|")
  • "abc|aa||".split("\Q|\E") 应该可以工作。

标签: java regex string split special-characters


【解决方案1】:

我不知道你是怎么尝试的,但是

public static void main(String[] args) {
    String a= "abc|aa||";
    String split = Pattern.quote("|");
    System.out.println(split);
    System.out.println(Arrays.toString(a.split(split)));
}

打印出来

\Q|\E
[abc, aa]

| 上有效拆分。 \Q ... \E 是一个正则表达式引用。其中的任何内容都将作为文字模式匹配。


string.split("\|"); // won't work because \| is not a valid escape sequence
string.split("/|"); // will compile, but split on / and empty space, so between each character
string.split("|");  // will compile, but split on empty space, so between each character

// true alternative to quoted solution above
 string.split("\\|") // escape the second \ which will resolve as an escaped | in the regex pattern

【讨论】:

  • 谢谢!有没有办法让我也得到空白?所以对于上面的字符串,我会得到:[abc,aa,]?
  • 另一件事,当我尝试这条线时: System.out.println(Arrays.toString(a.split("\Q|\E")));我收到一个错误....为什么会这样?
  • @ron 你可能还没有导入Arrays 类。为了获得空间,我认为有一个重载的split 方法可以为你做到这一点。我现在无法检查。让我回复你。
【解决方案2】:

需要使用双反斜杠,因为反斜杠也是一个特殊字符。所以你需要转义转义字符。 IE。 \ \|

【讨论】:

    【解决方案3】:

    | 是一个特殊字符,因此您需要使用斜杠对其进行转义。尝试使用

    string.split("\\|")

    【讨论】:

      【解决方案4】:

      | 是正则表达式的特殊字符,因此必须对其进行转义,例如\|

      反斜杠\在Java中是一个特殊字符,因此也必须转义

      因此,必须做到以下几点才能达到预期的效果。

      string.split("\\|")
      

      【讨论】:

        【解决方案5】:

        以下所有模式都可以拆分:"\\Q|\\E""\\|""[|]"当然后两者更可取

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-28
          • 1970-01-01
          • 2011-11-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多