2015-08-08 54 views
1
public class Test { 
    public static void main(String[] args){ 
     Pattern a = Pattern.compile("(?=\\.)|(?<=\\.)"); 
     Matcher b = a.matcher("."); 
     while (b.find()) System.out.print("+"); 
    } 
} 

我一直在閱讀上Regular-Expressions.info環視部分,並試圖弄清楚它是如何工作的,我堅持用這個東西環視工作。當我運行上面的代碼的結果是++,我不明白,因爲「。」是與這種模式相對應的唯一標誌,顯然在「」後面或前面沒有任何東西。那麼它如何匹配兩次呢?如何正則單獨使用時

+0

@hwnd我的理解lookarounds並不消耗任何標記,但我不明白的是,沒有任何標記在「。」之後或之前,因爲我只有lookbehead和lookahead而不是\ \。在我編譯的模式中,我認爲它不應該匹配任何東西,但不知何故它會匹配兩次。 – tareviverat

+0

'^^^'由於[zero-width](https://regex101.com/r/rI5bH1/2)的位置,你得到兩個匹配。 – hwnd

+0

@hwnd對不起,不停地打擾你......不是零寬度意味着它是一個斷言(應該有一段時間要麼在前面,要麼在當前位置後面),它不會消耗任何令牌(http:// stackoverflow.com/questions/3275375/zero-width-token)我不明白你的意思是零寬度的位置......你的意思是像「。」之前和之後的空白。 ? – tareviverat

回答

1

作爲正則表達式引擎前進通過所述輸入,則認爲這兩個字符位置輸入內之前和之後字符作爲不同的位置。

您輸入有3個位置:

  1. 只是第一個字符
  2. 第一個字符
  3. 只是第一個字符

位置1場比賽(?=\\.)前後。
位置3匹配(?<=\\.)

+0

現在我明白了。非常感謝! – tareviverat

相關問題