提取姓名和电子邮件地址的正则表达式在网站中效果良好,但在java代码中效果不佳
我编写了一个从给定字符串中提取姓名和电子邮件地址的方法。我使用下面的正则表达式提取姓名和电子邮件地址的正则表达式在网站中效果良好,但在java代码中效果不佳,java,regex,Java,Regex,我编写了一个从给定字符串中提取姓名和电子邮件地址的方法。我使用下面的正则表达式 "FROM: (?: ?([^ ]*)?\\s)?(?:<?(.+@[^>]+)>?)" “FROM:(?:?([^]*)?\\s)?(?:来自java文档: 匹配器是通过调用模式的匹配器方法从模式创建的。一旦创建,匹配器可用于执行三种不同类型的匹配操作: matches方法尝试根据模式匹配整个输入序列 lookingAt方法尝试将输入序列与模式匹配,从开头开始 find方法
"FROM: (?: ?([^ ]*)?\\s)?(?:<?(.+@[^>]+)>?)"
“FROM:(?:?([^]*)?\\s)?(?:来自java文档:
匹配器是通过调用模式的匹配器方法从模式创建的。一旦创建,匹配器可用于执行三种不同类型的匹配操作:
- matches方法尝试根据模式匹配整个输入序列
- lookingAt方法尝试将输入序列与模式匹配,从开头开始
- find方法扫描输入序列,寻找与模式匹配的下一个子序列
如您所见,matches
方法只会在整个正则表达式与数据匹配时返回true
。
在您的情况下,您试图查找与正则表达式匹配的数据部分,因此应该使用查找方法
因此,您的代码应该如下所示:
public void extractNameAndEmail(String input) {
if(input == null)
return;
String reg = "FROM: (?: ?([^ ]*)?\\s)?(?:<?(.+@[^>]+)>?)";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println(matcher.group());
}
}
public void extractNameAndEmail(字符串输入){
如果(输入==null)
返回;
String reg=“FROM:(?:?([^]*)?\\s)?(?:来自java文档:
匹配器是通过调用模式的匹配器方法从模式创建的。一旦创建,匹配器可用于执行三种不同类型的匹配操作:
- matches方法尝试根据模式匹配整个输入序列
- lookingAt方法尝试将输入序列与模式匹配,从开头开始
- find方法扫描输入序列,寻找与模式匹配的下一个子序列
如您所见,matches
方法只会在整个正则表达式与数据匹配时返回true
。
在您的情况下,您试图查找与正则表达式匹配的数据部分,因此应该使用查找方法
因此,您的代码应该如下所示:
public void extractNameAndEmail(String input) {
if(input == null)
return;
String reg = "FROM: (?: ?([^ ]*)?\\s)?(?:<?(.+@[^>]+)>?)";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println(matcher.group());
}
}
public void extractNameAndEmail(字符串输入){
如果(输入==null)
返回;
String RG= =“从:(?):([^)*?s)?(?):首先需要修剪额外的字符(更改表达式),或者考虑使用<代码> Matter .FIN()/<代码>,而不是<代码> Matter(Matter)()/代码>,然后在找到匹配后修剪额外的字符。首先需要修剪额外的字符(更改表达式)或者考虑使用<代码> Matter .Fund()/<代码>而不是<代码> Matter(Matcess)(<)>代码>,然后在找到匹配后修剪额外的字符。