Java\\s和\\s+中的regex表达式

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

请说,这些表达式有什么区别

x = x.replaceAll("\\s", "");
x = x.replaceAll("\\s+", "");
提问于
用户回答回答于

replaceAll不管是什么,这两个调用总是会产生相同的结果x。但是,需要注意的是,这两个正则表达式并不相同:

  • \\s - 匹配单个空格字符
  • \\s+ - 匹配一个或多个空白字符的序列。

在这种情况下,它没有什么区别,因为你用一个空字符串替换了所有的东西(尽管\\s+从效率的角度来看最好使用)。如果你用一个非空字符串替换,两者的行为会有所不同。

用户回答回答于

第一个匹配单个空白,而第二个匹配一个或多个空白空间。它们是所谓的正则表达式量词,它们执行如下匹配:

Greedy quantifiers
X?  X, once or not at all
X*  X, zero or more times
X+  X, one or more times
X{n}    X, exactly n times
X{n,}   X, at least n times
X{n,m}  X, at least n but not more than m times

Reluctant quantifiers
X?? X, once or not at all
X*? X, zero or more times
X+? X, one or more times
X{n}?   X, exactly n times
X{n,}?  X, at least n times
X{n,m}? X, at least n but not more than m times

Possessive quantifiers
X?+ X, once or not at all
X*+ X, zero or more times
X++ X, one or more times
X{n}+   X, exactly n times
X{n,}+  X, at least n times
X{n,m}+ X, at least n but not more than m times

扫码关注云+社区