管道何时需要放在foo.split()中的方括号(匹配)中

时间:2015-02-24 09:29:42

标签: java regex

我最近遇到了一个问题,我使用了" |"作为论点。例如:

String foo = "Hello|World";
System.out.println(foo.split("|")[1]);

令我惊讶的是打印的结果是H.知道这是正则表达式我用[]包围它并且它正常工作(打印出世界)。

我的问题是我怎么知道[]是否必要,因为我已经使用了拆分|没有[]之前,它工作正常。我的java版本自那以后没有改变。唯一的区别是这是一个Android项目。

编辑:我似乎错了,只是尝试了各种方式分裂" |"没有转义或添加到集合,但总是相同的结果。我知道我之前已拆分过管道,但似乎我必须将其转义或添加到一组以获得正确的结果。

4 个答案:

答案 0 :(得分:2)

管道(|)是一个保存的正则表达式符号(它允许正则表达式组件在逻辑上OR - ed),但如果要在其字符上下文中使用它,则必须转义将其添加到集合中(用[]表示)。

逃避示例:

System.out.println(foo.split("\\|")[1]);

将管道添加到设置示例:

System.out.println(foo.split("[|]")[1]);

答案 1 :(得分:2)

尝试转义管道,因为拆分方法将正则表达式作为输入," |"(管道)具有特殊含义,因此请使用它:

String foo = "Hello|World";
System.out.println(foo.split("\\|")[1]);
Output:
World

答案 2 :(得分:0)

你需要一个分隔符(" \")来使用像|这样的特殊字符

String foo = "Hello|World";
System.out.println(foo.split("\\|")[1]);

答案 3 :(得分:0)

你需要转义正则表达式中具有特殊含义的每个字符。要获取所有特殊字符的列表,请查看Java API for the Pattern class

例如:.

- special meaning in the regex, it matched "Any character"
- if you want to disable this special meaning you have to escape it as `\.`
- as the backslash itself has also a special meaning you need to escape it as well,
  that's why the regex must be specified as `\\.`