2012-06-05 40 views
2

我有一個字符串,我需要獲取key-> value對的數組(2 - dim)。正則表達式在字符串中查找鍵 - >值

「匹配」 是當存在- >詞語 2之間,MO空間之前和之後 - >

例如輸入字符串:

skip_me key1-> VALUE1 key2- >值2 skip_me_2 key3->值3 skip_me_3 skip_me - >也

結果應該是數組:
KEY1,VALUE1
KEY2,值2
KEY3,VALUE3

這是我的代碼:

Pattern p = Pattern.compile("\\s*([^(->)]+)->([^(->)]+)\\s*"); 
Matcher m = p.matcher("skip_me key1->value1 key2->value2 skip_me_2 key3->value3 skip_me_3"); 
while(m.find()) { 
    System.out.println("Key:" + m.group(1) + "Value:" + m.group(2)); 
} 

我正則表達式是錯誤的。 請協助。

+0

你的問題是? –

+0

我的正則表達式錯誤 – kenny

回答

2

匹配單詞字符(字母,數字和下劃線_)...儘可能多的,因爲它可以

Pattern.compile("(\w+)->(\w+)"); 
+0

如果鍵和值之間沒有空格,那就好了。 – nhahtdh

+0

如果鍵不能包含破折號,則爲最佳選項。 –

1

嘗試

Pattern p = Pattern.compile("([^\s]+?)->([^\s]+)"); 

(在Java中沒有測試)。

+0

^\ s可以被\ S替換,並且不需要方括號。這給你留下更短的「(\ S +?) - >(\ S +)」:) –

0

你絕對的正則表達式的部分[^(->)]*是不是你想要的。它匹配一系列字符,不包含任何字符(,-,>)

+0

我需要這個來避免 - > - > - > – kenny

0

我想你可以使用:

Pattern.compile("\\s*(([^\\s]+)(?=->))->((?<=->)([^\\s]+))\\s*"); 

它使用正向前查找並積極回顧後發之前和之後->匹配一切。

未在Java中測試,僅在基於示例字符串的Eclipse Regex Util中測試。

相關問題