如何构建正则表达式以返回字符串的<
和@
之间的字符?
例如<1001@10.2.2.1>
将返回1001。
使用<.?>
的内容有效吗?
答案 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]*?)@
我假设它只是数字。
如果所有角色都使用此..
<(.*?)@
也许我缺乏知识,但我对正则表达式的理解是你需要()来获取捕获组...否则,如果你不这样做,你只需选择字符而不实际“捕获”它们。
所以这个..
<.?>
不会做任何事情。