获取两个字符之间的子字符串

时间:2013-08-27 18:41:12

标签: java regex

如何构建正则表达式以返回字符串的<@之间的字符?

例如<1001@10.2.2.1>将返回1001。

使用<.?>的内容有效吗?

3 个答案:

答案 0 :(得分:7)

  

使用"<.?>"的内容有效吗?

稍微修改过的版本可行:<.*?@(最后需要@,而您需要一个不情愿的量词*?来代替可选标记{{1 }})。然而,由于backtracking,它可能效率低下。这样的事情会更好:

?

此表达式首先找到<([^@]*)@ ,尽可能多地使用非<个字符,并在停止前捕获@

括号表示捕获组。使用正则表达式API提取它:

@

这会打印Pattern p = Pattern.compile("<([^@]*)@"); Matcher m = p.matcher("<1001@10.2.2.1>"); if (m.find()) { System.out.println(m.group(1)); } demo)。

答案 1 :(得分:1)

下一个怎么样:

(?<=<)[^@]*

e.g:

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

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

输出:

1001

答案 2 :(得分:0)

庵。

<([0-9]*?)@

我假设它只是数字。

如果所有角色都使用此..

<(.*?)@

tested here..

也许我缺乏知识,但我对正则表达式的理解是你需要()来获取捕获组...否则,如果你不这样做,你只需选择字符而不实际“捕获”它们。

所以这个..

<.?> 

不会做任何事情。