2013-03-21 140 views
4

我發現了類似的問題here。然而,我沒有得到它的工作:重疊正則表達式

我有一個像「my_token_string」字符串,需要一個正則表達式來返回令牌「my_」,「_token_」和「_string」。

請注意,我無法更改java代碼,因爲它是其他軟件的一部分。我能做的唯一的事情就是指定模式和組捕捉:-)

這是我測試過:

String p = "(?=(_[^_]*_?))"; 
int group = 1; 
String test = "my_token_string"; 

Matcher m = Pattern.compile(p).matcher(test); 
while (m.find()) { 
    System.out.println(m.group(group)); 
} 

但當然這僅返回令牌「_token_」和「_string 」。

回答

4

您可以試用"(?=((^|_).+?(_|$)))"。由於組號使用1

它會讓令牌以_或開始輸入(^)開始並以_或輸入結束($)結束。您可以使用[^_]+而不是.+?,但我更喜歡此版本。

3

你可以用正則表達式實現這一點:(?=((?:_|^)[^_]*+(?:_|$)))
解釋演示在這裏:http://regex101.com/r/tB0bZ4

+0

+1反正也沒有必要非捕獲組,因爲它們是內部的OP會使用,之前不是組。 – Pshemo 2013-03-21 14:44:59