2015-06-26 259 views
-1

這個表達式是什麼意思?正則表達式在做什麼?

Pattern.compile("^.*(?=.*\\d).*$", Pattern.CASE_INSENSITIVE | Pattern.COMMENTS) 

我試圖分割表達式的每個部分,但不能得到它的含義。請幫助我。

+0

只是出於好奇,將來我會有這樣的情況下'^ * $'是不一樣'^ 。*(?= \ d)。* $' – jrahhali

回答

0

regex101.com

enter image description here

TL; DR:

匹配包含至少一個(字符'0''9')任何String


作爲一個方面說明,我想指出,這是這樣做的一個可怕的方式,並且可以通過以下替換:

Pattern.compile("\\d"); 

我基本上去掉了所有的廢話貪婪填料和無用的錨。與Matcher#find()方法使用此正則表達式,而不是Matcher#matches()

0

這個正則表達式有兩個部分。
1.最多(但不包括)數字的部分。
2.從數字到字符串結尾的部分。

正則表達式從左到右進行處理。

它看到的第一件東西是.*。這告訴它直接到字符串的
結束並開始搜索倒着來滿足 - >

接下來的事情就看到的,這是(?=.*\d)
在該斷言中,.*由於之前的.*
而被忽略,因爲它已經在最後。

因此,搜索前進(使用聲明)到左邊,直到它找到一個數字直接位於當前位置前的
位置。

一旦找到了,它就會匹配該數字並全部過去,直到
的字符串結束。這是上面描述的第2部分。

從視覺上看,如果添加一些捕獲組並在一些
實際輸入上測試它,可以看出。

^
(.*)      # (1) 
(?= 
     (.*)      # (2) 
     (\d)      # (3) 
) 
(.*)      # (4) 
$ 

輸出:(?= * \ d)。

** Grp 0 - (pos 0 , len 15) 
12hh34ddd567uuu 
** Grp 1 - (pos 0 , len 11) 
12hh34ddd56 
** Grp 2 - (pos 11 , len 0) EMPTY 
** Grp 3 - (pos 11 , len 1) 
7 
** Grp 4 - (pos 11 , len 4) 
7uuu 
相關問題