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
5条答案
按热度按时间92vpleto1#
第一个匹配一个空格,而第二个匹配一个或多个空格,它们就是所谓的正则表达式量词,它们执行如下匹配(取自documentation):
mctunoxg2#
无论
x
是什么,这两个replaceAll
调用总是产生相同的结果。但是,需要注意的是,这两个正则表达式并不相同:\\s
-匹配单个空白字符\\s+
-匹配一个或多个空白字符的序列。在这种情况下,这没有什么区别,因为你用一个空字符串替换所有内容(尽管从效率的Angular 来看,使用
\\s+
会更好)。如果你用一个非空字符串替换,这两者的行为会不同。puruo6ea3#
首先,你需要了解两个语句的最终输出是相同的,即从给定的字符串中删除所有空格。
然而,
x.replaceAll("\\s+", "");
将是修剪空格的更有效的方式(如果字符串可以有多个连续的空格),因为由于正则表达式\\s+
一次匹配1个或多个空格并将其替换为空字符串,因此可能会减少替换次数。因此,即使您从这两种方法得到相同的输出,最好用途:
iyfjxgzm4#
第一个正则表达式匹配一个空格字符。第二个正则表达式不情愿地匹配一个或多个空格字符。在大多数情况下,这两个正则表达式非常相似,除了在第二种情况下,正则表达式可以匹配更多的字符串,如果它防止正则表达式匹配失败的话。from http://www.coderanch.com/t/570917/java/java/regex-difference
zujrkrfu5#
因为第二个参数是空字符串“",所以两种情况的输出没有区别。但如果第二个参数不是空的,例如“_”,则输出会有所不同。例如:
然后
会给予你
但是,
会给予你
有关详细信息,请参阅以下内容:https://www.baeldung.com/java-regex-s-splus