你如何构建一个正则表达式来返回字符串之间<
的@
字符?
例如<1001@10.2.2.1>
将返回 1001。
使用的东西会<.?>
起作用吗?
使用的东西会
"<.?>"
起作用吗?
稍加修改的版本就可以了:(最后<.*?@
需要一个@
,并且你需要一个不情愿的量词*?
来代替可选的标记?
)。但是,由于回溯,它可能效率低下。像这样的东西会更好:
<([^@]*)@
该表达式首先查找<
,尽可能多地获取非@
字符,并@
在停止之前捕获。
括号表示捕获组。使用正则表达式 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]*?)@
我假设它只是数字。
如果所有角色都使用这个..
<(.*?)@
也许我缺乏知识,但我对正则表达式的理解是你需要 () 来获取捕获组......否则,如果你不这样做,你只会选择字符而不实际“捕获”它们。
所以这..
<.?>
不会做任何事。