gpt4 book ai didi

Java:正则表达式模式不起作用

转载 作者:行者123 更新时间:2023-12-01 17:30:09 24 4
gpt4 key购买 nike

我正在解析一个文件,该文件始终包含电子邮件地址。该文件当前的布局在 @ 之前有一个前导空格,我们希望捕获该域。

foo @bar.com more data here
foo @foo.com more data here

我们想要提取 @bar.com@foo.com,我刚刚开始使用正则表达式。我正在尝试拉出模式“@位于单词边界的开头,包括所有后续字符,直到下一个单词边界”。

我已经尝试了以下各种迭代,对事物进行分组,@ 文字的方括号......但似乎没有任何效果。

编辑 - 实际代码:

import java.util.regex.*;
import java.io.*;
import java.nio.file.*;
import java.lang.*;
//
public class eadd
{
public static void main(String args[])
{
String inputLine = "foo foofoo foo foo @bar.com foofoofoo foo foo foo";
String eDomain = "";
// parse eadd
Pattern p2 = Pattern.compile("(\\b@.*\\b)");
Matcher m2 = p2.matcher(inputLine);
if(m2.matches()) {
eDomain = m2.group(1);
} else {
eDomain = "n/a";
}
System.out.println(p2+" "+m2+" "+eDomain);
}
}

以及我运行它时的结果。

(\b@.*\b) java.util.regex.Matcher[pattern=(\b@.*\b) region=0,49 lastmatch=] n/a

我的所有问题都与 @ 后面的内容有关,该内容被作为文字而不是模式进行搜索(例如,查找 .* 而不是 任何和所有字符)。我找不到对 @ 作为控制字符的引用,所以我认为我不需要转义。

Oracle 的 java 教程或文档中没有类似的示例,SO,我查看的任何在线资源也没有;我一直无法找到人们如何处理此问题的其他示例。就像我说的,我对正则表达式相当陌生,但这在我看来应该对我有用。我错过了什么?

最佳答案

Java 不会将 @ 视为单词字符 - 因此地址开头没有单词边界。您可以用简单的空格匹配替换单词边界:

"\s(@.+?)\b"

(或者 "\\s(@.+?)\\b" 因为这是 Java)应该可以解决问题。它查找后跟 @ 的空格并匹配直到下一个单词边界。

编辑:哎呀,.,就像@一样,不是单词字符(废话)。使用

"\\s(@.+?)(?:\\s|$)"

匹配直到下一个空格或EOF。 (?:\\s|$) 是一个非捕获组,它将匹配任何空格或输入结尾。

关于Java:正则表达式模式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11867593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com