我嘗試創建一個正則表達式/替換對,與replaceAll()
一起使用,它將捕獲目標字符串之前和之後的字符。是否有可能對非捕獲組有反向引用?
這裏是我的版本,對於簡單的情況下工作:
String adjacent = "fooaXbcXdbar".replaceAll(".*?(.)X(.).*?(?=(.X)|$)", "$1$2");
其根據需要(在提前結束的外觀是消耗字符串進行到replaceAll()
工作的單一通話結束)產生"abcd"
。
然而,有一個邊緣的情況下,我似乎無法求解,當目標後的字符也是目標之前的字符:
String adjacent = "fooaXbXdbar".replaceAll(".*?(.)X(.).*?(?=(.X)|$)", "$1$2");
產生"ab"
,但我想"abbd"
。正則表達式消耗了匹配的主要部分,使得以下輸入不匹配。
我試過看看周圍,但似乎無法得到它的工作。
注意:我對涉及循環或代碼等的解決方案不感興趣。只是尋求適用於上述邊界案例的正則表達式和替換字符串。
要回答的問題標題:No. – 2012-11-04 02:15:17