爲什麼下面的測試失敗任何想法(返回 「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. php preg_match非貪婪?
- 5. 貪婪算法
- 6. Regex篡改行爲貪婪
- 7. PyParsing非貪婪匹配
- 8. 非貪婪的預讀
- 9. perl非貪婪問題
- 10. ANTLR與非貪婪規則
- 11. 「非貪婪」差異輸出?
- 12. 非捕獲組不貪婪?
- 13. 正則表達式混合貪婪和非貪婪?
- 14. 貪婪和非貪婪的正則表達式
- 15. 正則表達式的幫助,貪婪與非貪婪
- 16. 自動換行貪婪方法
- 17. 擊敗貪婪算法
- 18. 貪婪算法,調度
- 19. 找到與貪婪算法
- 20. 貪婪算法:機器人
- 21. 貪婪執行語句?
- 22. 使用正則表達式查找所有匹配 - 貪婪和非貪婪!
- 23. Python re.sub使用非貪婪模式(。*?)結束字符串($)它變得貪婪!
- 24. 隔離子字符串非貪婪?
- 25. 非貪婪重複與秒差距
- 26. 非貪婪通配符「忽略」
- 27. 如何做一個非貪婪lstrip()
- 28. 非重疊區間的貪婪選擇
- 29. 非貪婪的正則表達式
- 30. 在Textpad中使用POSIX非貪婪RegEx
什麼'「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