2013-08-27 31 views

回答

7

会使用"<.?>"工作吗?

稍微修改的版本,它会工作:<.*[email protected](您需要一个@末,你需要一个不情愿的量词*?到位可选标记?的)。然而,由于backtracking,它可能效率低下。像这样的东西会更好:

<([^@]*)@ 

这个表达式通过查找<,以尽可能多的非@角色,因为它可以和停止之前捕捉@开始。

括号表示一个捕获组。使用表达式API将其解压:

Pattern p = Pattern.compile("<([^@]*)@"); 
Matcher m = p.matcher("<[email protected]>"); 
if (m.find()) { 
    System.out.println(m.group(1)); 
} 

这将打印1001demo)。

+0

如何返回结果为一个字符串? – ono

0

嗯。

<([0-9]*?)@ 

我假设它只是数字。

如果所有字符使用这个..

<(.*?)@ 

tested here..

也许我缺乏知识,而是我正则表达式的理解是,你需要()来获取捕获组...否则,如果你不会只是在没有实际“捕捉”他们的情况下选择角色。

所以这个..

<.?> 

不会做任何事情。

1

怎么样的未来:

(?<=<)[^@]* 

例如为:

private static final Pattern REGEX_PATTERN = 
     Pattern.compile("(?<=<)[^@]*"); 

public static void main(String[] args) { 
    String input = "<[email protected]>"; 
    Matcher matcher = REGEX_PATTERN.matcher(input); 
    while (matcher.find()) { 
     System.out.println(matcher.group()); 
    } 
} 

输出:

1001 
相关问题