2014-04-16 54 views
1

我不是很熟悉正則表達式,所以我在這裏問它。獲取字符串之間的字符串

我有一個字符串,像這樣:

BEGIN:VCARD 
VERSION:3.0 
FN:A Sirius Swimwear Collection 
N:Collection;A;Sirius Swimwear;; 
TEL;TYPE=HOME:22448 
TEL;TYPE=CELL:52316 
ADR:;Taylors Road;;;;; 
ORG:Norfolk Phone Book 
END:VCARD 
BEGIN:VCARD 
VERSION:3.0 
FN:A Walk in the Wild 
N:Wild;A;Walk in the;; 
TEL;TYPE=HOME:22502 
item1.TEL:23205 
item1.X-ABLabel:Facsimile 
ADR:;Grassy Road;;;;; 
ORG:Norfolk Phone Book 
END:VCARD 
BEGIN:VCARD 
VERSION:3.0 
FN:AATA Orn Tours 
N:Tours;AATA;Orn;; 
TEL;TYPE=HOME:23611 
TEL;TYPE=CELL:50755 
ADR:;Bookings;;;;; 
ORG:Norfolk Phone Book 
END:VCARD 
BEGIN:VCARD 
VERSION:3.0 
FN:Aatuti Art 
N:Art;Aatuti;;; 
TEL;TYPE=HOME:23669 
ADR:;The Village;;;;; 
ORG:Norfolk Phone Book 
END:VCARD 
BEGIN:VCARD 
VERSION:3.0 
FN:ABC Hobby Centre 
N:Centre;ABC;Hobby;; 
TEL;TYPE=HOME:22139 
ADR:;Taylors Road;;;;; 
ORG:Norfolk Phone Book 
END:VCARD 
(...) 

對於那些熟悉,它是一堆電子名片的,我想通過一個從字符串得到一個電子名片之一。所以,我想把它分成多個字符串。我想用BEGIN:VCARDEND:VCARD標籤分裂

結束了:說實話

vcard1 = "BEGIN:VCARD 
    VERSION:3.0 
    FN:A Sirius Swimwear Collection 
    N:Collection;A;Sirius Swimwear;; 
    TEL;TYPE=HOME:22448 
    TEL;TYPE=CELL:52316 
    ADR:;Taylors Road;;;;; 
    ORG:Norfolk Phone Book 
    END:VCARD"; 

vcard2 = "BEGIN:VCARD 
    VERSION:3.0 
    FN:A Walk in the Wild 
    N:Wild;A;Walk in the;; 
    TEL;TYPE=HOME:22502 
    item1.TEL:23205 
    item1.X-ABLabel:Facsimile 
    ADR:;Grassy Road;;;;; 
    ORG:Norfolk Phone Book 
    END:VCARD"; 

vcard3 = "BEGIN:VCARD 
    VERSION:3.0 
    FN:AATA Orn Tours 
    N:Tours;AATA;Orn;; 
    TEL;TYPE=HOME:23611 
    TEL;TYPE=CELL:50755 
    ADR:;Bookings;;;;; 
    ORG:Norfolk Phone Book 
    END:VCARD"; 

,我需要的只是正確的正則表達式模式爲我能夠做他們的週期。 這是在JAVA(適用於Android)。

編輯

這是我到目前爲止已經試過沒有成功:

if(vcard.contains("VERSION:")) 
     { 
      Log.d(TAG, "Creating the patterns"); 
      Pattern p = Pattern.compile("BEGIN:VCARD(.*)END:VCARD"); 

      Matcher m = p.matcher(vcard); 

      if (m.find()) 
      { 

       Log.d(TAG, "Find: " + m.group(1)); 

      } 
      Log.d(TAG, "Not found anything"); 
+1

不錯,你到目前爲止嘗試過什麼? – nKn

+1

我不認爲你在這裏需要一個正則表達式,當你找到一個'BEGIN:VCARD'行時,開始建立一個字符串,並且當你找到一個'END:VCARD'行時,把構建的字符串添加到列表中。 –

+0

@nKn檢查我編輯的問題。 – dazito

回答

4

您可以使用Pattern.DOTALL與您正則表達式。這意味着In dotall mode, the expression dot(.) matches any character, including a line terminator,它會幫助你匹配來自多行的模式。

String input = "__YOUR__VCARDS__"; 
Pattern pattern = Pattern.compile("(BEGIN:VCARD.*?END:VCARD)", Pattern.DOTALL); 
Matcher m = pattern.matcher(input); 
while (m.find()) { 
    System.out.println(m.group(1)); 
} 
+0

該死的,我太親近了:)只是缺少'Pattern.DOTALL'。謝謝,它正在工作! – dazito

0

您應該嘗試ez-vcard。這是一個適用於Android的Java vCard庫。

聲明:我是作者;)

相關問題