爲什麼下面的測試失敗任何想法(返回 「XX」 代替 「X」)我不想做"^.*$"
....我想了解這種行爲。 任何線索?
6
A
回答
9
是的,它與this question中描述的完全一樣!
.*
將首先在輸入端匹配整個輸入,但隨後又一個空字符串...
讓我們用象徵的|
正則表達式引擎和輸入與<...>
在你的榜樣。
- 輸入:
<xyz>
; - 正則表達式引擎,在第一次運行之前:
<|xyz>
; - 正則表達式引擎,第一次運行後:
<xyz|>
(匹配文本:「xyz」); - 正則表達式引擎,第二次運行後:
<xyz>|
(匹配的文本:「」)。
並非所有的正則表達式引擎都這樣。不過,Java確實如此。 perl也是如此。作爲一個反例,sed將在步驟3的輸入結束後將其光標定位。
現在,您還必須瞭解一件至關重要的事情:正則表達式引擎在遇到零長度匹配時總是前進一個字符。否則,請考慮如果您嘗試用'a'替換'^'會發生什麼情況:'^'與某個位置匹配,因此是零長度匹配。如果引擎沒有前進一個字符,那麼「x」將被替換爲「ax」,這將替換爲「aax」等。因此,在第二次匹配之後,Java的正則表達式引擎推進一個「字符「......其中沒有任何:處理結束。
0
@Test
public void testReplaceAll(){
assertEquals("x", "xyz".replaceAll(".+", "x"));
}
可能會做的伎倆,因爲這需要一個或多個字符,所以沒有阻止,其中*可能匹配零個字符,並以「X」代替它的行爲。
相關問題
- 1. 爲什麼非貪婪的人物不會行事「不貪婪」?
- 2. 非貪婪正則表達式的行爲貪婪地
- 3. 貪婪行爲
- 4. 非貪婪搜索
- 5. 製作+非貪婪?
- 6. php preg_match非貪婪?
- 7. 非貪婪匹配
- 8. 非貪婪列表解析與pyparsing
- 9. Regex篡改行爲貪婪
- 10. Perl非貪婪匹配
- 11. 「非貪婪」差異輸出?
- 12. ANTLR與非貪婪規則
- 13. Perl的非貪婪表達
- 14. 非捕獲組不貪婪?
- 15. 非貪婪的預讀
- 16. 非貪婪分析與pyparsing
- 17. 猛砸非貪婪取代
- 18. Perl非貪婪匹配
- 19. PyParsing非貪婪匹配
- 20. Vim非貪婪搜索
- 21. perl非貪婪問題
- 22. 非貪婪分析與fnparse
- 23. 非貪婪換行符匹配re.DOTALL
- 24. Python的正則表達式的速度 - 貪婪與非貪婪
- 25. 貪婪和非貪婪的正則表達式
- 26. 正則表達式混合貪婪和非貪婪?
- 27. 貪婪與非貪婪在Perl的正則表達式
- 28. 正則表達式的幫助,貪婪與非貪婪
- 29. 正則表達式:理解非貪婪重複
- 30. Python貪婪算法
什麼'「xyz」.replaceAll(「。*」,「x」)'return? – robert 2011-12-29 19:38:51
@robert它返回'「xx」'。 – 2011-12-29 19:40:22
@JackEdmonds爲什麼'「xx」'而不是'「xxx」'? – user219882 2011-12-29 20:02:00