我不確定,如果正則運算式支持這一點。我只想從“TO:”行中提取所有郵件地址。這是給定的字串:
Content-Type: application/ms-tnef; name="winmail.dat"
Content-Transfer-Encoding: binary
From: Max Mustermann <[email protected]>
To: autorouter.test <[email protected]>, Max Mustermann<[email protected]>
CC: Max Mustermann <[email protected]>, Max Mustermann<[email protected]>
Subject: Subject-Foobar
Thread-Topic: Subject-Foobar
Thread-Index: AdiHB4KcplQHHfCjQW 1j4r7qtj8wg==
Date: Thu, 23 Jun 2022 15:51:03 0200
Message-ID: <[email protected]>
Accept-Language: de-DE, en-US
Content-Language: de-DE
X-MS-Has-Attach:
X-MS-Exchange-Organization-SCL: -1
X-MS-TNEF-Correlator: <[email protected]>
我可以選擇所有帶有“<.*>”的郵件地址,但如果我嘗試將其限制為以“To:”開頭的行則不行。
這將是所需的輸出:
- vr.test@foo-gruppe
- [email protected]
這可能嗎?
uj5u.com熱心網友回復:
在 Java 中,您可以在肯定的后向斷言中使用有限量詞:
(?<=^To:.{0,1000})<[^@<>] @[^@<>] >
解釋
(?<=斷言左邊是什么^字串的開始To:從字面上匹配.{0,1000}可選擇重復除換行符以外的任何字符 0 - 1000 次(相應地更改它)
)關閉后視<匹配開頭 <[^@<>]*@[^@<>]*匹配除 < 和 > 以外的左右 1 個字符之間的 @ 字符>匹配關閉>
查看正則運算式演示
您還可以捕獲尖括號之間的內容,并且如果非必要的 @ 部分僅使用否定字符類:
(?<=^To:.{0,1000})<([^<>]*)>
正則運算式演示
uj5u.com熱心網友回復:
為此,我相信您使用“積極的后視”,如下所示:
(?<=To:.*?)([\w.-] @[\w.-] )
或者
(?<=To:.*?)<(. ?)>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496182.html
標籤:正则表达式
