1

你如何构建一个正则表达式来返回字符串之间<@字符?

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

使用的东西会<.?>起作用吗?

4

3 回答 3

7

使用的东西会"<.?>"起作用吗?

稍加修改的版本就可以了:(最后<.*?@需要一个@,并且你需要一个不情愿的量词*?来代替可选的标记?)。但是,由于回溯,它可能效率低下。像这样的东西会更好:

<([^@]*)@

该表达式首先查找<,尽可能多地获取非@字符,并@在停止之前捕获。

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

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

这打印1001演示)。

于 2013-08-27T18:42:51.777 回答
1

接下来呢:

(?<=<)[^@]*

例如:

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
于 2013-08-27T18:52:32.887 回答
0

嗯。

<([0-9]*?)@

我假设它只是数字。

如果所有角色都使用这个..

<(.*?)@

在这里测试..

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

所以这..

<.?> 

不会做任何事。

于 2013-08-27T18:44:50.760 回答