2014-07-03 13 views
0

我有一個字符串像之間的所有比賽:java的正則表達式來得到一個字符串和下水管

ECLONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS 
ECLONG_TEXT_INSIDE_THIS2|LONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS 
ECLONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS 
ECLONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS 

我需要所有EC和第一之間的話|。

這並沒有爲我工作:

lAllText = lData.split("EC(.*?)|"); 

我有什麼改變你管理這個問題?

感謝您的幫助

斯特凡

+1

管道是正則表達式中的一個特殊字符。我想你現在知道該怎麼做。你爲什麼分裂? –

回答

1

使用後視組和前視組來匹配您的Pattern

// assuming multi-line, but not relevant 
String input = 
    "ECLONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS\n" 
    + "ECLONG_TEXT_INSIDE_THIS2|LONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS\n" 
    + "ECLONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS\n" 
    + "ECLONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS|LONG_TEXT_INSIDE_THIS"; 
    //       | look behind for "EC" 
    //       |  | match any+ character reluctantly 
    //       |  | | look ahead for "|" (escaped) 
    Pattern p = Pattern.compile("(?<=EC).+?(?=\\|)"); 
    Matcher m = p.matcher(input); 
    while (m.find()) { 
     System.out.println(m.group()); 
    } 

輸出

LONG_TEXT_INSIDE_THIS 
LONG_TEXT_INSIDE_THIS2 
LONG_TEXT_INSIDE_THIS 
LONG_TEXT_INSIDE_THIS 
2

你可以試試下面的正則表達式來獲得EC和第一|符號之間的值。

(?<=EC)[^\|]* 

DEMO

Java的正則表達式將是

"(?<=EC)[^\\|]*" 

說明:

  • (?<=EC)一個回顧後用於剛過設置匹配標記字符串EC 。
  • [^\|]*匹配任何字符,但不匹配|符號零次或多次。
+0

解釋你的改變! – christopher

+0

@christopher謝謝補充。 –

1

匹配所有的標記,你可以這樣做:

Pattern regex = Pattern.compile("\\G_?([^|_]+)"); 
Matcher regexMatcher = regex.matcher(subjectString); 
while (regexMatcher.find()) { 
    matchList.add(regexMatcher.group(1)); 
} 

matchList:

ECLONG 
TEXT 
INSIDE 
THIS 
相關問題