java - 需要正则表达式来检索字符 < 和 > 之间的异常消息中的电子邮件 ID
问题描述
需要有关正则表达式的帮助以检索错误堆栈中的电子邮件 ID,例如“一些文本一些文本换行符等等”。
尝试使用堆栈溢出中提供的一些建议。但他们中的大多数只打印错误
以下是我尝试过的一些选项,
Matcher m = Pattern.compile("\\<([^>]+)\\)").matcher(e.getMessage());
while(m.find())
{
System.out.println(m.group(1));
}
System.out.println(e.getMessage().split("<(<^>>+)>"));
exception.getMessage().split("\\[([^]]+)\\]")
exception.getMessage().split("\\<\"(.*?)\"\\>")
exception.getMessage().split("<(<^>>+)>")
实际结果字符串数组仅包含一个值并打印整个堆栈,如下所示,
Failed messages: javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 550 5.0.0 <abc@def.com>... User unknown
;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 550 5.0.0 <def@ghi.com>... User unknown
;
PS:email id中没有\。堆栈溢出不接受 < 后面的字符。所以在此之前添加了转义字符。
解决方案
这应该做你想做的事,尽管假设每条消息只会有一个。
public class someClass {
private static final Pattern idPattern = Pattern.compile("<.*>");
public static void main(String[] args) {
doStuff();
}
public static void doStuff(){
try{
throwNPE();
} catch (NullPointerException ex){
String message = ex.getMessage();
if(idPattern.matcher(message).matches()){
System.out.println(getId(message));
}
}
}
public static String getId(String message){
String[] messageParts = message.split("<|>");
if(messageParts.length > 1){
return messageParts[1];
}else{
throw new IllegalArgumentException();
}
}
public static void throwNPE(){
throw new NullPointerException("<123>");
}
}
您的示例只需要 doStuff() 和 getId(String) (并且您可以删除静态),但是想提供一个工作示例。
任何必要的解释,请询问。祝你好运!
推荐阅读
- r - 计算两个日期之间的值的平均值
- jquery - 内联引导日期选择器日期范围
- c# - C# 使用 emgu 库,但 System.TypeInitializationException 总是出错
- cas - CAS根据不同服务切换主题
- android - 是 Kotlin 中任何其他类的 Nothing 子类吗?
- kubernetes - Kustomize - “未能找到补丁的唯一目标......”
- java - 如何在应用程序的生命周期中保持绑定服务运行?
- c - 在c中读取时解析文件
- python-3.x - 如何在使用 pyaudio 时不获取 OSError: [Errno -9993] I/O 设备的非法组合
- javascript - What query do I use to return unique rows in
.find()