gpt4 book ai didi

java - 一个奇怪的常客

转载 作者:行者123 更新时间:2023-11-30 11:32:10 27 4
gpt4 key购买 nike

我写了一段程序从“:”(可能没有)和“@”之间的字符串中获取内容并保证顺序,例如像“url:123@my.com”这样的字符串,我获取“123”或“123@my.com”,然后我也获取“123”;所以我写了一个正则表达式来实现它,但我不能工作,后面是第一个版本:

Pattern pattern = Pattern.compile("(?<=:?).*?(?=@)");
Matcher matcher = pattern.matcher("sip:+8610086@dmcw.com");
if (matcher.find()) {
Log.d("regex", matcher.group());
} else {
Log.d("regex", "not match");
}

它不能工作,因为在第一种情况下:"url:123@my.com"它将得到结果:"url:123"显然不是我想要的:

所以我写了第二个版本:

Pattern pattern = Pattern.compile("(?<=:??).*?(?=@)");

但是报错,有人说java在look behind中不支持可变长度;

所以我尝试第三个版本:

Pattern pattern = Pattern.compile("(?<=:).*?(?=@)|.*?(?=@)");

其结果与第一个版本相同,但不应该首先考虑第一个条件吗?

一样
Pattern pattern = Pattern.compile(".*?(?=@)|(?<=:).*?(?=@)");

不是从左到右!我认为我以前了解正则表达式,但再次混淆。无论如何提前感谢。

最佳答案

试试这个(稍作编辑,查看评论):

String test = "sip:+8610086@dmcw.com";
String test2 = "8610086@dmcw.com";
Pattern pattern = Pattern.compile("(.+?:)?(.+?)(?=@)");
Matcher matcher = pattern.matcher(test);
if (matcher.find()) {
System.out.println(matcher.group(2));
}
matcher = pattern.matcher(test2);
if (matcher.find()) {
System.out.println(matcher.group(2));
}

输出:

+8610086
8610086

如果您需要有关模式的解释,请告诉我。

关于java - 一个奇怪的常客,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16808943/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com