2013-05-07 106 views
0

任何人都可以幫助我將這個正則表達式轉換成Java?我不確定它爲什麼不起作用,我已經閱讀了文檔並將它用於Java,但它不適用於Java。然而,它在Perl正則表達式測試網站上工作得很好。我有麻煩的正則表達式,我不知道爲什麼它不起作用

(.*?);[01]: 

所以我基本上有這樣的:

expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1 

所有我想要做的就是名字expiem2pfemfrance,等的列表到字符串數組

是的,這裏是我的代碼:其中builder.toString()包含我提到的內容

Pattern pattern = Pattern.compile("h=(.*)"); 
Matcher match = pattern.matcher(builder.toString()); 
if(match.find()) { 
    this.userlist = match.group(1).split("(.*?);[01]:");        
    this.loaded = true; 
    this.index = 0; 
} 

順便說一句,match.group(1)是我張貼的確切字符串,正是

expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1 

+0

你能張貼你已經嘗試嗎?即您嘗試使用正則表達式的實際Java代碼。 – 2013-05-07 07:12:07

+0

這不會打到完整的字符串,只能是字符串的一部分,所以根據你放置該正則表達式的位置,你將獲得更少或更多的成功。顯示更多關於你使用的代碼 – Nanne 2013-05-07 07:13:40

回答

0
String names = "expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1" 
String[] nameArray = names.split(":"); 

List<String> nameList = new ArrayList<String>(); 
for (String name : nameArray) { 
    String[] tupel = name.split(";"); 
    nameList.add(tupel[0]); 
} 

那麼它是不是一個很酷的正則表達式的解決方案(我用它打印出來在控制檯上進行了測試)但是我很容易理解。基本上你分裂長串入較小的字符串,通過該分離:

然後拆分使用分離的小字符串;並將該結果的第一個條目(即名稱)添加到列表中。

2

你不需要串捕捉到是你的分裂表達式的一部分:它會吃了你的字符串。

您聲明perl版本可行,但需要輸入字符串以:結尾。如果沒有,則需要在:之後添加?以指定它是可選的。

嘗試:

this.userlist = match.group(1).split(";[01]:?"); 
+0

這個工程:http://ideone.com/4FhRUB – ValarDohaeris 2013-05-07 07:25:09

+0

你不需要額外的'?'在最後擺脫最後一個'; 1'? – 2013-05-07 07:26:25

+0

@ValarDohaeris請注意,OP在輸入字符串的末尾沒有':',而您的代碼有 – 2013-05-07 07:30:14

1

有了這個代碼

String input = "h=expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1"; 

Pattern pattern = Pattern.compile("h=(.*)"); 
Matcher match = pattern.matcher(input); 
if(match.find()) { 
    String substr = match.group(1); 
    System.out.println(substr); 

    String[] userlist = substr.split(";[01]:?"); 
    System.out.println(Arrays.toString(userlist)); 
} 

expiem;0:2pfemfrance;1:runiora;1:stallker420;1:phoenixblaze0916;1:myothorax;1 
[expiem, 2pfemfrance, runiora, stallker420, phoenixblaze0916, myothorax] 

相關的正則表達式來分割字符串是";[01]:?"

0

兩個問題:

  • 你的正則表達式是捕捉你的目標 - 正則表達式應該是分離,不是你想要的內容,以保持
  • 你有waaay太多的代碼。你只需要一條線!

試試這個:

String[] names = builder.toString().split(";[01]:"); 
相關問題