繁体   English   中英

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

[英]Get substring between two characters

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

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

使用<.?>东西可以工作吗?

使用"<.?>"行得通吗?

对其进行稍加修改的版本将起作用: <.*?@ (您需要在末尾使用@ ,并且需要一个不愿意的量词*?来代替可选标记? )。 但是由于回溯,它可能效率很低。 这样的事情会更好:

<([^@]*)@

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

括号表示捕获组。 使用regex API提取它:

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

这将打印1001演示 )。

接下来呢:

(?<=<)[^@]*

例如:

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

<([0-9]*?)@

我假设它只是数字。

如果所有字符都使用此

<(.*?)@

在这里测试

也许我缺乏知识,但是我对正则表达式的理解是,您需要()来获取捕获组...否则,如果您不选择字符,就不会真正“捕获”它们。

所以这..

<.?> 

什么也不会做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM