正则表达式:方括号[]和竖线|之间的区别

时间:2014-10-25 18:19:02

标签: java regex

我无法理解方括号[]和竖线|之间的差异在正则表达式中。

例如: 当我在java中使用这段代码来改变String的格式时(使用|):

str = str.replaceAll("(\\d+|\\W)", "$0 ").replaceAll("\\s+", " ").trim();

来自:(12 +((23 + 37)*(774 * 435)))

To:(12 +((23 + 37)*(774 * 435)))

哪个是所需的输出。

然而,当我使用这段代码时,我得到一个不同的输出(使用[]):

str = str.replaceAll("[\\d+\\W]", "$0 ").replaceAll("\\s+", " ").trim();

我来自:(12 +((23 + 37)*(774 * 435)))

To:(1 2 +((2 3 + 3 7)*(7 7 4 * 4 3 5)))

注意数字之间的空格(不需要)。

那么,有人可以解释一下发生了什么吗?或者[]和|?

之间有什么区别

谢谢。

2 个答案:

答案 0 :(得分:2)

这是similar question

垂直条是正则表达式"或"意味着" a或b"

方括号是一个字符类,意思是"来自a或b的任何字符。

Character class是"或"的缩写。从explanation

开始
  • 如果您想匹配a或e使用[ae]
  • 字符类仅匹配单个字符。
  • 您还可以使用连字符指定范围,例如[0-9]或[a-e]

答案 1 :(得分:0)

括号([])否定了+的效果。所以当你有[\\d+\\W]时,它匹配一个字符(数字,+或非字)