[英]Need Regular Expression to retrieve Email IDs in an Exception Message between the characters < and >
需要有關正則表達式的幫助以在錯誤堆棧中檢索電子郵件 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:電子郵件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) 作為您的示例(並且您可以刪除靜態),但是想提供一個工作示例。
任何必要的解釋,請詢問。 祝你好運!
這根據接受的答案正常工作, 正則表達式提取方括號之間的文本
Pattern.compile("\\<(.*?)\\>").matcher(e.getMessage());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.