字符串 Tokenizer/Regex 在文件中查找电子邮件 address/IP 地址

String Tokenizer/Regex to find email address/IP Address in a file

我有一个包含电子邮件地址和 IP 地址的行的文档。我需要根据电子邮件地址和 IP 地址拆分文档,以将每个 IP/email 地址或文件中的单词存储在一个数组中。

有没有办法使用 regex/String Tokenizer 找到 email/IP 地址来做到这一点?我知道如何使用 regex/String Tokenizer 逐行分隔句子中的单词。只是不确定如何找到 email/IP 地址。 因为该文件可能包含不应该包含在数组中的非法字符,如 @ \ //。

例如我的文档包含:

可以联系test@test.com,地址是192.168.1.1。

我的数组应该包含:

可以

联系

测试@test.com

地址

192.168.1.1

这里有一个 regexr,其中包含一些示例和一个适合您的正则表达式。

正则表达式是(电子邮件部分是从 here 复制的,我也不肯定它复制并粘贴正确。):

(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

电子邮件地址的正则表达式是:

[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

IP 地址的正则表达式是:

((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))

在我看来,您可以使用 java.util.regex.Matcher 并调用方法 matcher.group(0),例如:

 Pattern p = Pattern.compile("<your regex here>");
 Matcher m = p.matcher(str);
 List<String> strs = new ArrayList<>();
 while (m.find())
     strs.add(m.group(0));

这些可能工作正常,但我还没有测试。