[英]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.