這個表達式是什麼意思?正則表達式在做什麼?
Pattern.compile("^.*(?=.*\\d).*$", Pattern.CASE_INSENSITIVE | Pattern.COMMENTS)
我試圖分割表達式的每個部分,但不能得到它的含義。請幫助我。
這個表達式是什麼意思?正則表達式在做什麼?
Pattern.compile("^.*(?=.*\\d).*$", Pattern.CASE_INSENSITIVE | Pattern.COMMENTS)
我試圖分割表達式的每個部分,但不能得到它的含義。請幫助我。
TL; DR:
匹配包含至少一個數(字符'0'
到'9'
)任何String
。
作爲一個方面說明,我想指出,這是這樣做的一個可怕的方式,並且可以通過以下替換:
Pattern.compile("\\d");
我基本上去掉了所有的廢話貪婪填料和無用的錨。與Matcher#find()
方法使用此正則表達式,而不是Matcher#matches()
。
這個正則表達式有兩個部分。
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
只是出於好奇,將來我會有這樣的情況下'^ * $'是不一樣'^ 。*(?= \ d)。* $' – jrahhali