回答
第一個單一的空白匹配之間的差異,而第二個匹配一個或多個空格。他們是所謂的正則表達式量詞,和他們進行這樣的比賽(從documentation拍攝):
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
我一直很喜歡他們如何分別描述每個量詞的貪婪,不情願和佔有慾,然後對所有三個人說完全一樣的話。 ;) – 2013-03-25 22:50:15
第一個正則表達式將匹配一個空白字符。第二個正則表達式將不情願地匹配一個或多個空白字符。對於大多數用途來說,這兩個正則表達式非常相似,除了第二種情況,正則表達式可以匹配更多的字符串,如果它阻止正則表達式匹配失敗。從http://www.coderanch.com/t/570917/java/java/regex-difference
劃傷單詞「不情願」。這個問題是關於'\ s +',而不是'\ s +?'就像另一個問題。 – 2013-03-25 23:13:08
這兩個replaceAll
調用總是會產生相同的結果,無論x
是什麼。然而,值得注意的是,兩個正則表達式是不一樣重要的是:
\\s
- 匹配單個空白字符\\s+
- 相匹配的一個或多個空格字符序列。
在這種情況下,它沒有區別,因爲您用空字符串替換所有內容(儘管從效率的角度來看最好使用\\s+
)。如果你用一個非空字符串替換,兩者的行爲會有所不同。
W.r.t您的第一行,如果x是「預訂您的域名並獲取\ n \ n \ n \ n \ n \ n在線今日」。兩者會產生相同的結果嗎? – user3705478 2016-12-15 10:01:26
@ user3705478兩者都會產生相同的結果,即使在彼此之後會有多個空格。區別在於它處理的方式。如果你有一組(例如)3個空格直接跟隨另一個\\ s +接受該組,並將其整體變成一個「」,而\\ s將自己處理每個空間。 – Daemun 2017-01-04 09:29:03
首先,您需要了解兩個語句的最終輸出將是相同的,即從給定字符串中刪除所有空格。
然而x.replaceAll("\\s+", "");
將修剪的空間(如果串可具有多個連續空格)由於更高效的方式潛在更少不會因更換的事實該正則表達式\\s+
比賽1或多個空格一次,並用空字符串替換它們。
所以,即使你得到同樣的輸出都最好是使用:
x.replaceAll("\\s+", "");
- 1. 正則表達式這是什麼正規表達式S#的意思^ */##小號
- 2. Java正則表達式組與。* vs正常正則表達式
- 3. \ S正則表達式
- 4. 正則表達式與Java
- 5. \ s ++正則表達式
- 6. 正則表達式「,\\ s(。*?),\\」
- 7. 正則表達式正則表達式正則表達式使用正則表達式,但不是與Python
- 8. java的正則表達式
- 9. S的正則表達式/ ^(*。):\ S * //
- 10. 寫正則表達式表達的java
- 11. Java的正則表達式:表達
- 12. 與Java正則表達式
- 13. 正則表達式 - Java的
- 14. Java的正則表達式
- 15. 正則表達式(正則表達式)
- 16. 形式的Java正則表達式PHP正則表達式
- 17. 正則表達式[\ S但不是[[\ S?
- 18. 正則表達式的Java
- 19. Css與正則表達式的編號
- 20. 正則表達式(正則表達式)
- 21. 小號///和正則表達式在Perl
- 22. 正則表達式的正則表達式的Java字符串
- 23. 正則表達式到Java正則表達式 - 替換和Lambdas
- 24. Java中的正則表達式(正則表達式和語法)
- 25. 正則表達式\\ s *,\\ s *做什麼?
- 26. 正則表達式(\ S +?)vs(\ S +))
- 27. 正則表達式for(... Excludes-> \([\ s \ S] + \)...)?
- 28. 將Java正則表達式轉換爲PHP正則表達式
- 29. PHP的preg_match和正則表達式的正則表達式
- 30. 正則表達式(正則表達式)
量詞,他們讀了。 – jn1kk 2013-03-25 22:01:36