2013-05-20 38 views
6

我發現this線程,它的用戶之一張貼下面的代碼行:Java的正則表達式中的元字符

String[] digits2 = number.split("(?<=.)"); 

我諮詢了幾個來源 - 像12 -to破譯這是什麼意思的代碼,但我無法弄清楚。任何人都可以解釋split()方法中的參數是什麼意思?

編輯:的人誰,因爲我有同樣的問題,這裏的另一個有用的link

回答

4

這是一個positive lookbehind。整體表達的意思是「在任何角色之後,但沒有捕捉任何東西」。從本質上講,如果字符串看起來像

ABC 

那麼比賽將發生在|,字符之間。

A|B|C| 
+0

我知道「。」匹配除換行符之外的任何字符,但是在此上下文中「<=」是什麼意思? – Haque1

+1

@ Haque1這是一組元字符,告訴表達式「。」不應該捕獲任何東西。引擎需要看到角色在那裏,但它不應該從流中移除該角色。 – dasblinkenlight

+1

@ Haque1這是一個不尋常的使用lookbehind。更常見的方式是這樣的:'(?<= tag :)「[^」] *「'。該表達式僅在引用字符串前面加上'tag:'字符串。 – dasblinkenlight

1

.split("")(在一個空串/圖案)將在正則表達式的開始空字符串相匹配。這是一個額外的空字符串字符,這是不可取的。 (?<=.)是一個零寬度斷言(不消耗任何字符),匹配零寬度空間後跟任何字符(後面是因爲它是倒序)。這將分割每個字符之間的空字符串,但不是第一個字符和字符串開頭之間的空白字符串。

+0

零寬度空間爲在這裏使用錯誤的術語;這是[一個不同的事物](http://en.wikipedia.org/wiki/Zero-width_space)。 – Cairnarvon

+0

@Cairnarvon謝謝你指出這一點...你更喜歡哪一個詞? –

+0

I想要說「性格邊界」,但這也不是很嚴格。老實說,我不確定。 – Cairnarvon