Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的正则表达式不起作用_Java_Regex - Fatal编程技术网

Java中的正则表达式不起作用

Java中的正则表达式不起作用,java,regex,Java,Regex,我试图用Java为电子邮件地址创建一个正则表达式,但我被卡住了。当我使用一些在线正则表达式测试程序时,它工作得很好,但在Java中它似乎不想工作 以下是我的表达: [a-zA-Z!$.&\\d]{4,24}[@][a-zA-Z]{2,}[.edu|.com|.net] 它应该是: 4-24个字符的用户名,可以有数字“.”、“&”、“$”和“ “!”在里面 “@”字符后面 域至少包含2个字符,但可以包含以下内容 “学校,alt” 并且结尾只能是“.net”、“.com”或“.edu” 不知道我

我试图用Java为电子邮件地址创建一个正则表达式,但我被卡住了。当我使用一些在线正则表达式测试程序时,它工作得很好,但在Java中它似乎不想工作

以下是我的表达:
[a-zA-Z!$.&\\d]{4,24}[@][a-zA-Z]{2,}[.edu|.com|.net]

它应该是:

  • 4-24个字符的用户名,可以有数字“.”、“&”、“$”和“ “!”在里面
  • “@”字符后面
  • 域至少包含2个字符,但可以包含以下内容 “学校,alt”
  • 并且结尾只能是“.net”、“.com”或“.edu”
不知道我做错了什么


即使我用一封简单的电子邮件来测试它,比如“test@school.edu“它不匹配。

您可以使用
|
或以下命令将正则表达式的结尾更改为非捕获组:

(?:\.edu\.com\.net)

或者,正如@Bohemian所评论的,您可以将这个模拟程序编写为
\(?:edu|com|net)

现在您正在使用
[.edu|.com|.net]


正则表达式中有一些错误

  • \\d
    还将验证prrsian编号,例如:
    。所以你应该使用[0-9]
  • @
    周围不需要大括号
  • 最后一个表达式
    .edu | com |.net
    必须放在圆括号内
    (.edu | com |.net)
    。因为它不是一组字符,它是一个严格的表达式。也可以将点从括号中取出<代码>\(教育网)
  • 您应该在正则表达式之前和之后添加
    ^
    $
    以验证总字符串
  • 因此,正则表达式将是:
    ^[a-zA-Z!$.&0-9]{4,24}-[a-zA-Z]{2,}\(edu | com | net)$

    正确(除了它被称为字符类,而不是字符集),或者更简单:
    \(?:edu | com | net)
    @Bohemian啊好的,谢谢!然后我猜答案并不完全正确:“使用一个“字符类”,也称为“字符集”,“可能相关”,从regexp的部分开始,一步一步地进行,直到您发现它的哪些部分不能作为预期的邮件地址工作。考虑一下你是否真的想要这个。(另外,您的域名当前不能包含“school.alt”)。